【问题标题】:nib class is different in different target?笔尖类在不同的目标中有所不同?
【发布时间】:2013-05-07 00:04:21
【问题描述】:

我正在尝试编写一个设置视图控制器的单元测试,我尝试了两种方法来获取视图初始化,第一种方法是使用包来加载 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 Builddr 中,指定自定义类名
  2. 将 xib 文件添加到我的测试目标中的复制构建资源部分的列表中
  3. 将 tableview 出口链接到接口文件(虽然我不能将视图出口拖到我的班级,但它会自动指向班级中的 tableView)

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

【问题讨论】:

    标签: ios objective-c cocoa viewcontroller


    【解决方案1】:
    MyViewController *controller;
    NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    controller=(MyViewController *)[nibContents objectAtIndex:0];
    

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

    【讨论】:

    • 有效!谢谢高拉夫·拉斯托吉!顺便说一句,我有什么可以参考的,以了解为什么会发生这种情况?
    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多