【问题标题】:Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:5261 [duplicate]-[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] 中的断言失败,/SourceCache/UIKit/UIKit-2903.23/UITableView.m:5261 [重复]
【发布时间】:2013-12-29 15:53:11
【问题描述】:

我正在使用 Xcode 5.0.2、iOS7。我使用导航控制器和表格视图。

我将表格视图“内容”从动态原型更改为静态单元格,然后它就崩溃了。 崩溃前,APP运行正常。请帮忙。谢谢。

-[UITableView 中的断言失败 dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:5261

2013-12-11 23:04:12.952 Wop[9339:60b] * 由于应用程序终止 未捕获的异常“NSInternalInconsistencyException”,原因:“无法 使具有标识符 Cell 的单元出列 - 必须注册一个 nib 或一个 标识符的类或连接故事板中的原型单元'

* 首先抛出调用栈:

(0x30cfe83 0x3b03c6c7 0x30cdfd55 0x316880af 0x335d015f 0x240bf 0x33596315 0x3353e6cd 0x3353def1 0x33464353 0x330ea943 0x330e6167 0x33115425 0x334e118f 0x334df7f9 0x334dea37 0x334de9bf 0x334de957 0x334d7459 0x3346a397 0x334de6a9 0x334de17d 0x3346f581 0x3346cae5 0x334d782d 0x334d45fd 0x334ceb41 0x33469a07 0x33468cfd 0x334ce321 0x3594e76d 0x3594e357 0x30caa777 0x30caa713 0x30ca8edf 0x30c13471 0x30c13253 0x334cd5c3 0x334c8845 0x23d71 0x3b535ab7)

libc++abi.dylib:以未捕获的类型异常终止 NSException

(lldb)

12/15 12:37 添加 很抱歉问这个类似的问题,这是我第一次学习语言,我不知道我应该输入什么关键字。

【问题讨论】:

  • 您添加了单元格标识符吗?你是否传递了与 dequeueReusableCellWithIdentifier:@"HERE PASS IDENTIFIER"forIndexPath: 参数相同的标识符
  • @Greg 你是这个意思吗? - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
  • 甚至不是 Xcode 问题...
  • 只有使用动态原型的表格视图才需要 cellForRowAtIndexPath 方法,因此您应该从视图控制器 .m 文件中删除该方法。
  • @Lyssa 你能说得清楚一点吗?谢谢。

标签: ios objective-c uitableview ios7


【解决方案1】:

当创建一个从 UITableViewController 继承的视图控制器时,已经包含了以下方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

如果您不使用动态原型,则不需要这些方法,应将其删除。

当您的 tableview 正在加载时,它正在调用 cellForRowAtIndexPath(如果 numberOfSectionsInTableViewnumberOfRowsInSection 返回的数字不是 0),它试图创建一个标识符为“Cell”的单元格。它找不到具有此标识符的原型单元格,因为您已将表格设置为使用静态单元格,因此您得到了异常。

【讨论】:

  • YESSSSS,非常感谢。它是有益的。这行得通。但是单元格项目名称不见了......我该怎么做才能保存它?检查:imgur.com/1mS1wqW
  • 你能看到故事板中的项目名称吗?
  • 不能。 imgur.com/vAYgjDi
  • 您需要将项目名称添加到情节提要中的单元格中。您的单元格样式当前设置为“自定义”,因此您可以将 UILabel 拖到每个单元格上并输入您的项目名称。或者,您可以将每个单元格的样式设置为预设之一,例如“基本”,然后更改该文本。
  • WWWWOOOOOO,我很惊讶它是如此简单,令人惊叹。无论如何,这是工作。太感谢了。 imgur.com/8RuFxgO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2012-02-01
相关资源
最近更新 更多