我不明白这一点:我的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:'

我看过许多其他类似问题的条目。 我很沮丧! 我做了家庭作业,确保返回的单元格不是nil,但仍然可以得到这个断言!

有人可以帮忙吗? 谢谢

===============>>#1 票数:0 已采纳

原来我确实返回了单元格(就cellForRowAtIndexPath:而言)

通过将tableView.datasource和tableView.delegate分配给dealloc中的nil可以解决此问题。

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

  ask by Bamaco translate from so

未解决问题?本站智能推荐: