0

我不明白这一点:我的 cellForRowAtIndexPath: indexPath: 返回一个正确的 UITableViewCell。(我有一个断言,大意是它不是 nil 并且有痕迹来证明它)

但我仍然得到这个零星的例外?

这就是我分配/重用单元格的方式:

...
{
  UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier: cellIdentifier];
  if (cell == nil)
  {
      cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault
                                     reuseIdentifier:  cellIdentifier] autorelease];
      cell.selectionStyle = UITableViewCellSelectionStyleNone;
  }
  assert(cell);
  // (code to populate cell)
  // ...
  assert( cell != nil);
  NSLog(@"returning cell %@ type %@", cell, NSStringFromClass([cell class]));
  // edit: showing actual return value
  return cell;
}

崩溃在日志中如下所示:

2013-04-17 16:46:05.323 .. -[SomeEditViewController tableView:cellForRowAtIndexPath:] returning cell <UITableViewCell: 0x20d1a2e0; frame = (0 351; 320 43); hidden = YES; autoresize = W; layer = <CALayer: 0x20d1a410>> type UITableViewCell
2013-04-17 16:46:15.296 ... *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit/UIKit-2380.17/UITableView.m:5471
2013-04-17 16:46:15.301 ... *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

我查看了许多其他具有类似问题的条目。我难住了!我做了功课,确保我返回的单元格不为零,但我仍然得到这个断言!

任何人都可以帮助解决这个问题吗?谢谢

4

1 回答 1

0

事实证明,我确实返回了单元格(就 cellForRowAtIndexPath: 而言)

通过在 dealloc 中将 tableView.datasource 和 tableView.delegate 分配给 nil 解决了这个问题。

当容器视图控制器被释放时,表视图很可能仍在等待释放,并且它无法调用我的 cellForRowAtIndexPath 实现。至少,我能够重现问题(和修复)。

于 2013-04-18T00:12:50.593 回答