【问题标题】:Nib must contain exactly one top level object which must be a UITableViewCell instanceNib 必须包含一个必须是 UITableViewCell 实例的顶级对象
【发布时间】:2013-09-09 10:50:13
【问题描述】:

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

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

  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

有什么建议吗?

【问题讨论】:

  • 您确定将 UITableViewCell 添加到 xib 文件中吗?和 xib 文件只包含那个?
  • 是的,我已经在我的 xib 文件中声明了自定义类。
  • 哦不!我找到了一个同名的 xib 文件 - “丢失的文件”。我相信当存在两个同名的 xib 时会发生间歇性错误 - 加载的行为和 xib 不能未定义。
  • 对我来说,显示此错误是因为,我在 xib 文件中有一个额外的空单元格。

标签: ios objective-c uitableview


【解决方案1】:

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

我删除了那个标签,它起作用了。

【讨论】:

  • 谢谢,我已经添加了 TapGesture。
【解决方案2】:

已解决

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

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

【讨论】:

  • 你能详细说明你的答案吗?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 2017-05-02
      • 2020-01-23
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      相关资源
      最近更新 更多