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

seu*_*ner 12 objective-c uitableview ios

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

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

  1. 我在对象列表中使用NIB文件和一个视图 - 在顶部,确定 - .它有类型TweetViewCell,它扩展了UITableViewCell - .
  2. 我已经将[b]标识符[/ b]定义为" TweetTableViewCellId "
  3. 我加载nib并在viewDidLoad上注册它(我已经调试并且nib对象被加载)
  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
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

Imr*_*ran 8

我有一个标签不在左侧的XIB文件元素列表中的"内容视图"下.

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

  • 谢谢,在我的情况下,我添加了TapGesture. (4认同)

seu*_*ner 5

解决

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

我删除了"被遗忘的"xib文件并且有效!

  • 你能详细说明你的答案吗? (3认同)