Nib必须包含一个顶级对象,它必须是一个UITableViewCell实例

尝试使用注册为重复使用的笔尖时遇到了错误的错误。 我在两个ViewController上使用相同的自定义单元格。

***由于未捕获的exception“NSInternalInconsistencyException”,终止应用程序,原因:“无效的注册标识符(TweetTableViewCellId) – 笔尖必须包含只有一个顶级对象必须是一个UITableViewCell实例“

  1. 我在对象列表中使用一个视图的NIB文件 – 在顶部,当然 – 。 它有types的TweetViewCell,它扩展了UITableViewCell – 。
  2. 我已经将[b]标识符[/ b]定义为“ TweetTableViewCellId
  3. 我加载笔尖,并注册了viewDidLoad(我已经debugging和笔尖对象加载)
  4. 我尝试使用相同的ID恢复注册的单元格。

一些代码

// First Controller to use custom Cell @implementation TweetsViewController - (void) viewDidLoad { ... UINib *nib = [UINib nibWithNibName:kTweetTableViewCellNibName bundle:nil]; [self.tweetsTableView registerNib:nib forCellReuseIdentifier:@"TweetTableViewCellId"]; .. } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TweetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kTweetTableViewCellId forIndexPath:indexPath]; ... } @end // second Controller to use custom Cell @implementation OfflineEpisodeModalViewController - (void) viewDidLoad { UINib *nib = [UINib nibWithNibName:kTweetTableViewCellNibName bundle:nil]; [self.tweetSearchTableView registerNib:nib forCellReuseIdentifier:kTweetTableViewCellId]; } ... - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TweetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TweetTableViewCellId" forIndexPath:indexPath]; } @end 

有什么build议?

我在左边的XIB文件元素列表中有一个不在“内容视图”下面的标签。

我删除了该标签,它的工作。

解决

很简单,但无论如何,作为一个新的知识是有效的:如果你声明一个相同的名字(我的错误)的XIB文件,将不能保证将被加载的文件。

我删除“被遗忘的”xib文件并且工作!

您可能有两个视图指向您的.xib中的同一个类。仔细检查您的接口文件