0

我正在尝试编写一个设置视图控制器的单元测试,我尝试了两种方法来获取视图初始化,第一种方法是使用包来加载 nib 内容并过滤掉我正在寻找的内容,如下:

MyViewController *controller = nil;
....
NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
NSObject* nibItem = nil;
while ( (nibItem = [nibEnumerator nextObject]) != nil) {
    if ([nibItem isKindOfClass:[MyViewController class]]) {
    controller = (MyViewController*) nibItem;
    break;
    } else {
        NSLog(@"nibItem class is %@", [nibItem class]);
        NSLog(@"nibItem is %@", nibItem);
    }
}

完成这些代码后,控制器仍然为零,我插入了一些日志来检查 nib 类(%@ 占位符),结果与 MyViewController 相同(至少两个类描述都如此),我'我很确定这些代码在调试/发布目标中运行良好,但在我运行单元测试时它不起作用。

那么这是否意味着尽管它们的类描述相同,但类是不同的?

我尝试的第二种方法是使用 initWithNibNamed:owner:options 方法,只需指定 xib 文件名,但 Xcode 回复 nib 已加载但未设置视图出口,情况正如我发现的问题描述的那样,但我仔细检查是否已正确设置:

  1. 在 Interface Builddr 中,指定自定义类名
  2. 将 xib 文件添加到我的测试目标中的复制构建资源部分的列表中
  3. 将 tableview 出口链接到接口文件(虽然我不能将视图出口拖到我的班级,但它会自动指向班级中的 tableView)

到目前为止,我可以获得测试通过的唯一方法是手动设置视图控制器的视图和表格视图。

4

1 回答 1

0
MyViewController *controller;
NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
controller=(MyViewController *)[nibContents objectAtIndex:0];

用这个替换你现有的代码,希望这会对你有所帮助。

于 2013-05-06T16:04:21.413 回答