2012-04-03 27 views
8

我使用的是自定義UITableViewCell。當我嘗試運行我的代碼,我得到這個異常堆棧和我無法理解問題的根源:無效的筆尖註冊標識符((null)) - 筆尖必須包含一個頂級

terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'invalid nib registered for identifier ((null)) - nib must contain exactly one top level object which must be a UITableViewCell instance' 

請注意,我沒有使用故事板。

編輯:

這是我的相關代碼根據斷點引起的問題:

[tableviewSupport registerNib:[UINib nibWithNibName:@"HotelCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:CustomCellCId]; 
+0

爲了調試的目的,我建議將代碼行分成兩部分。將UINib對象加載到變量中,並在嘗試註冊之前測試它是否成功。 – 2012-04-03 16:14:23

回答

1

我不是很確定你正在嘗試在您提供的代碼來完成。你將在tableView:cellForRowAtIndexPath:中卸載你的筆尖。您可以使用下面的代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Assuming you set a reuse identifier "cellId" in the nib for your table view cell... 
    HotelCell *cell = (HotelCell *)[tableView dequeueReusableCellWithIdentifier:@"cellId"]; 
    if (!cell) { 
     // If you didn't get a valid cell reference back, unload a cell from the nib 
     NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"HotelCell" owner:nil options:nil]; 
     for (id obj in nibArray) { 
      if ([obj isMemberOfClass:[HotelCell class]]) { 
       // Assign cell to obj 
       cell = (HotelCell *)obj; 
       break; 
      } 
     } 
    } 

    return cell; 
} 

現在,根據您發佈的錯誤,iOS的期待陣列中的一個對象,所以for循環可能是不必要的。我通過檢查[nibArray count] == 1,然後抓取objectAtIndex:0並將其分配給單元而不是循環來完成此操作,並且這也適用。但是,如果有一天蘋果決定在nibArray中加入其他東西,for循環可以保護你免受這種情況的侵害。

+0

如果您使用IOS6,請嘗試使用dequeueReusableCellWithIdentifier:forIndexPath:並且很高興。驗證單元是否爲零不再需要 – seufagner 2013-09-05 14:33:10

0

這可能不是OP的問題的答案,但我對於不同的解決方案有同樣的錯誤,所以我會回答這個問題,以便來到後來的Google員工。

有一個UITableViewCell在我的廈門國際銀行(實際上,我自己的子類) - 所以我不明白爲什麼它不工作。

的關鍵似乎是:

當你已經創建了一個XIB文件與一個UITableViewCell或子類(例如,如果你從圖書館上一個UITableViewCell拖動右下角),界面生成器會顯示一個選項「檢查器」選項卡的「表格視圖單元格」部分下。

我通常用於創建UIView並將其類型更改爲我的UITableViewCell子類,所以我從未注意到該選項。

這是,你需要輸入識別碼(以及在你的registerNib:withReuseIdentifer:調用)。

更令我沮喪的是,當遇到這種情況時,它並沒有崩潰EVERY時間,只有第一次。奇怪的。

29

另一種解決方案:

我的UITableViewCell,但在我的廈門國際銀行有一個額外的對象,這是我放錯了標籤。

因此請仔細檢查您的XIB,確保左側物體表中只有一個物體。

enter image description here

+0

是的,我有一個Button只是坐在那裏 – 2013-05-02 16:59:33

+0

謝謝,這個答案只是結束了大約三個小時的看似無望的調試。我以爲我已經從IB生成的文件中刪除了默認視圖,但事實證明我只隱藏了它。 – 2014-01-28 10:03:29

+1

哇。這是一個簡單的例子,它可以幫助您節省數小時的調試時間。謝謝。 – holydevil 2014-06-20 03:13:02

0

在我來說,我設定的名稱類的屬性(如爲:@property(強,非原子)IBOutlet中的UILabel *類)在tableviewcell,這給上面提到的錯誤,然後將其命名「班」是不是客觀的c類型,改變(class = classabc)解決上述問題。

相關問題