2013-05-06 33 views
0

我试图编写一个单元测试,设置视图控制器,我试过两种方法来获取视图init,第一种方法是使用该包加载笔尖内容并筛选出我正在寻找的那个对,如下:不同的目标是不同的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); 
    } 
} 

后这些代码完成后,控制器仍然是零,我已经插入一些日志检查笔尖类(%@占位符),和原来是一样的MyViewController(至少两个类的描述都是这样),我非常确定这些代码在调试/发布目标中工作得很好,但是在我运行单元测试时它不起作用。

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

我试过的第二种方法是使用initWithNibNamed:owner:options方法,只是简单地指定xib文件名,但Xcode回复说nib加载了但view outlet没有设置,情况就像问题描述的那样找到,但我必须仔细检查,事情已经设置正确:

  1. 在接口Buildedr,指定自定义类名
  2. XIB文件添加到副本建立资源部分名单在我的测试目标
  3. 将tableview出口链接到接口文件(虽然我不能将视图出口拖到我的班级,但是它自动指向类中的tableView)

直到现在,我可以通过手动方式来获取测试通道,以设置视图控制器的视图和表格视图。

回答

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

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

+0

它的工作原理!感谢Gaurav Rastogi!顺便说一句,有什么我可以参考知道为什么会发生? – 2013-05-07 05:49:37