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

时间:2013-09-05 14:30:52

标签: ios objective-c uitableview

尝试使用已注册重用的nib时出现了间歇性错误。我在两个ViewControllers上使用相同的自定义单元格。

  

2013-09-05 11:04:08.476 xxx [51395:c07] ***由于终止应用程序   未捕获的异常'NSInternalInconsistencyException',原因:   '无效的nib注册标识符(TweetTableViewCellId) - nib   必须包含一个必须是a的顶级对象   UITableViewCell实例'

  1. 我在对象列表中使用NIB文件和一个视图 - 在顶部,确定 - 。它有类型TweetViewCell,它扩展了UITableViewCell - 。
  2. 我已将[b]标识符[/ b]定义为“ TweetTableViewCellId
  3. 我加载nib并在viewDidLoad上注册了它(我已经调试并且nib对象被加载了)
  4. 我尝试使用相同的ID恢复注册的单元格。
  5. 某段代码

    // 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
    

    任何建议?

4 个答案:

答案 0 :(得分:8)

我的标签不在左侧XIB文件元素列表中的“内容视图”下。

我删除了那个标签并且有效。

答案 1 :(得分:5)

分辨

很简单,但无论如何,作为一种新知识是有效的:如果你声明一个同名的xib文件(我的错误),那么将加载的文件是无法保证的。

我删除了"忘记了" xib文件和工作!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我遇到了同样的问题。仅通过代码在单元格上添加手势识别器。 这个对我有用。我认为这是 UIKit 的错误。