Nib 必须恰好包含一个顶级对象,该对象必须是 UITableViewCell 实例 [英] Nib must contain exactly one top level object which must be a UITableViewCell instance

查看:64
本文介绍了Nib 必须恰好包含一个顶级对象,该对象必须是 UITableViewCell 实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用已注册以供重用的笔尖时出现间歇性错误.我在两个 ViewController 上使用相同的自定义单元格.

I got intermitent error when try to use nib that was registered for reuse. Im using the same custom cell on two ViewControllers.

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

2013-09-05 11:04:08.476 xxx[51395:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'invalid nib registered for identifier (TweetTableViewCellId) - nib must contain exactly one top level object which must be a UITableViewCell instance'

  1. 我在对象列表中使用带有一个视图的 NIB 文件 - 在顶部,当然 -.它有 TweetViewCell 类型,它扩展了 UITableViewCell -.
  2. 我已经将 [b]identifier[/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

有什么建议吗?

推荐答案

RESOLVED

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

Is simple, but anyway, is valid as a new knowledge: if you declare a xib file with the same name (my mistake), the file that will be loaded isnt guaranteed.

我删除了被遗忘的"xib 文件并且工作了!

I delete the "forgotten" xib file and works!

这篇关于Nib 必须恰好包含一个顶级对象,该对象必须是 UITableViewCell 实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆