12

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

2013-09-05 11:04:08.476 xxx[51395:c07] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“为标识符 (TweetTableViewCellId) 注册的 nib 无效 - nib 必须恰好包含一个顶级对象,该对象必须是 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

有什么建议吗?

4

4 回答 4

8

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

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

于 2015-10-31T03:06:59.050 回答
5

解决

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

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

于 2013-09-05T19:45:01.487 回答
0

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

于 2021-07-26T13:54:40.457 回答
0

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

于 2017-07-07T17:51:47.503 回答