cellForRowAtIndexPath不会在reloadRowsAtIndexPaths之后调用

正如苹果文件所说,

重新加载行会导致表视图询问其数据源为该行的新单元格。

我将UITableView与NSFetchedResultsController结合在一起:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { if (self.tableView.isEditing) { [self.tableView setEditing:NO animated:YES]; } [self.tableView beginUpdates]; } - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { [self.tableView endUpdates]; [self updateTabItemBadge]; [self.noDataView setHidden:![self isNoData]]; WXINFO(@"controllerDidChangeContent"); } 

在上述两个函数之间,我重新加载目标单元格:

在这里输入图像说明

  case NSFetchedResultsChangeUpdate: { if (indexPath) { [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; } 

在这里输入图像说明

我在Line1563设置了一个断点来检查reloadRowsAtIndexPaths是否被调用,但是在这之后, - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath没有被调用。

所以,我的手机无法更新。

有人可以告诉我为什么? 谢谢。

你可以请检查通过重新加载tableview使用[tableView reloadData]?

如果只希望更新一行而不重新载入表格,请检查'indexPath'types。 它应该是NSIndexPath。

包裹在:

 [tableView beginUpdates]; [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; [tableView endUpdates]; 

我发现这样做的唯一可靠的方法是使用非none的animation。 如果指定了其他animation,则重新加载正确。

这是围绕我做的一个工作,但它做的工作。

  func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == UITableViewCellEditingStyle.delete { if itemDetailDict.count - 1 <= 0 { self.mainTable.beginUpdates() let cellOne = self.mainTable.cellForRow(at: indexPath) cellOne?.textLabel?.text = "There are no items." self.mainTable.reloadRows(at: [indexPath], with: .automatic) self.mainTable.endUpdates() } else { self.mainTable.beginUpdates() let removeKey = Array(itemDetailDict.keys)[indexPath.row] itemDetailDict.removeValue(forKey: removeKey) mainTable.deleteRows(at: [indexPath], with: .automatic) self.mainTable.endUpdates() } } } 

本质上在删除行函数,我希望用户能够删除该行,但只剩下一行时,我想在tableview的单元格中显示一个默认消息。

为此,我更新了数据源,当字典中没有更多数据时,我更新了单元格以显示文本,重新载入单元格,然后在我的tableview上调用endUpdating。

我希望这有帮助。