Ios nib类在不同的目标中是不同的?

Ios nib类在不同的目标中是不同的?,ios,objective-c,cocoa,viewcontroller,Ios,Objective C,Cocoa,Viewcontroller,我正在尝试编写一个设置视图控制器的单元测试,我尝试了两种方法来获取视图初始化,第一种方法是使用捆绑包加载nib内容并过滤掉我正在寻找的内容,如下所示: MyViewController *controller = nil; .... NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; NSEnumerator *nibEnumerator = [nibConte

我正在尝试编写一个设置视图控制器的单元测试,我尝试了两种方法来获取视图初始化,第一种方法是使用捆绑包加载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已加载但未设置视图出口,这种情况正如我发现的问题所述,但我已仔细检查是否已正确设置:

  • 在接口Buildedr中,指定自定义类名
  • 将xib文件添加到我的测试目标中的复制构建资源部分的列表中
  • 将tableview出口链接到接口文件(虽然我不能将视图出口拖动到我的类,但它会自动指向类中的tableview)
  • 到目前为止,获得测试通过的唯一方法是手动设置视图控制器的视图和表视图

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

    用此代码替换您现有的代码,希望这将对您有所帮助。

    它可以工作!谢谢Gaurav Rastogi!顺便问一下,有什么我可以参考的,知道为什么会发生这种情况?