【发布时间】:2013-09-09 10:50:13
【问题描述】:
尝试使用已注册可重复使用的 nib 时出现间歇性错误。我在两个 ViewControllers 上使用相同的自定义单元格。
2013-09-05 11:04:08.476 xxx[51395:c07] *** 终止应用程序由于 未捕获的异常“NSInternalInconsistencyException”,原因: '为标识符注册的无效笔尖 (TweetTableViewCellId) - 笔尖 必须恰好包含一个顶级对象,该对象必须是 UITableViewCell 实例'
- 我在对象列表中使用带有一个视图的 NIB 文件 - 在顶部,当然 -。它具有 TweetViewCell 类型,它扩展了 UITableViewCell -。
- 我已经将 [b]identifier[/b] 定义为“TweetTableViewCellId”
- 我加载了 nib 并在 viewDidLoad 上注册了它(我已经调试过了,并且加载了 nib 对象)
- 我尝试使用相同的 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