2013-05-06 37 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