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

时间:2013-05-06 15:49:31

标签: ios objective-c cocoa viewcontroller

我正在尝试编写一个设置视图控制器的单元测试,我尝试了两种方法来获取视图init,第一种方法是使用bundle来加载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);
    }
}

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

那么这意味着虽然类的描述是相同的,但是类是不同的吗?

我试过的第二种方法是使用initWithNibNamed:owner:options方法,只是简单地指定xib文件名,但是Xcode回复了nib加载但是查看插座未设置,情况就像我发现的问题所描述的那样,但我仔细检查事情是否已正确设置:

  1. 在Interface Buildedr中,指定自定义类名称
  2. 将xib文件添加到我的测试目标
  3. 中的复制构建资源列表部分
  4. 将tableview出口链接到接口文件(虽然我无法将视图出口拖到我的类中,但它会自动指向类中的tableView)
  5. 到目前为止,我可以手动设置视图控制器的视图和表视图。

1 个答案:

答案 0 :(得分:0)

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

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