我的UITableView遇到一个奇怪的问题:我使用reloadRowsAtIndexPaths:withRowAnimation:重新加载了一些特定的行,但是该应用程序崩溃了,似乎没有相关的异常:NSInternalInconsistencyException-尝试删除多于该节中存在的行。

我的代码如下所示:

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];

当我用简单的reloadRowsAtIndexPaths:withRowAnimation:替换该reloadData消息时,它可以完美运行。

有任何想法吗?

最佳答案

问题是您可能已更改了表的大小。例如,您已经添加或删除了一些用于表 View 的源数据。

在这种情况下,当您调用reloadData时,将完全重新加载表,包括节的大小和节的数量。

但是,当您调用reloadRowsAtIndexPaths:withRowAnimation:时,不会重新加载表 View 的参数。这会导致下一个问题:当您尝试重新加载某些单元格表时,请检查表 View 的大小并查看是否已更改。导致崩溃。仅当您不希望重新加载单元格的 View 时(例如,标签已更改或您想要更改其大小),才可以使用此方法。

现在,如果要从表格 View 中删除/添加单元格,则应使用下一种方法:

  • 通知表,其大小将通过调用beginUpdatesUITableView方法
  • 进行更改
  • 通知有关使用方法- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
  • 插入新行的信息
  • 通知有关使用- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation方法
  • 删除行的信息
  • 通过调用endUpdates的方法UITableView通知表大小已更改

  • 希望对您有所帮助

    关于iphone - reloadRowsAtIndexPaths:withRowAnimation:使我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4461490/

    10-08 23:47