reloadRowsAtIndexPaths 崩溃;重新加载数据工作

Posted

技术标签:

【中文标题】reloadRowsAtIndexPaths 崩溃;重新加载数据工作【英文标题】:reloadRowsAtIndexPaths crashing; reloadData working 【发布时间】:2017-09-07 07:19:40 【问题描述】:

当我尝试重新加载如下几行时,我的应用程序崩溃了:

[tblView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];

但是,当我将行替换为时,代码可以正常工作:

[tblView reloadData];

我得到的崩溃是

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

【问题讨论】:

表中是否有足够的行要重新加载? 我想你会给我们提供比这更多的信息.​​.....这些行的上下文是什么?例如,rowsToReload 可能指向不在表中的行,从而导致类似于 index out of range 异常。 尝试将rowsToReload 作为数组传递。 reloadData 将重新加载整个表。 ReloadRowsAtIndexPath 只会重新加载给定的 indexPath,我猜您的数据似乎有一些变化没有正确反映在您的数据源中?也许改变部分?你的帖子信息不多,所以我只是猜测 你能播下完整的崩溃日志吗? 【参考方案1】:
UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

[CATransaction begin];
[CATransaction setAnimationDuration:0.3];

[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction 
functionWithControlPoints:0 :1.8 :0 :1]];

[self.menuCollectionView performBatchUpdates:^
  [tblView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
 completion:^(BOOL finished) 
];

[CATransaction commit];
[UIView commitAnimations];

【讨论】:

【参考方案2】:

用作

 NSIndexPath* indexPath = [NSIndexPath indexPathForRow:2 inSection:0];

 NSArray* indexArray = [NSArray arrayWithObjects:indexPath, nil];

 [tblView  reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];

【讨论】:

【参考方案3】:

如下所示传递您的 indexPath。

NSIndexPath *index = [NSIndexPath indexPathForRow:indexPath.row inSection:0];
[tblView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone];

【讨论】:

以上是关于reloadRowsAtIndexPaths 崩溃;重新加载数据工作的主要内容,如果未能解决你的问题,请参考以下文章

reloadRowsAtIndexPaths 使用 JSON imageUrls 崩溃

iOS Swift 和 reloadRowsAtIndexPaths 编译错误

如何覆盖 reloadRowsAtIndexPath?

reloadRowsAtIndexPaths 时保持偏移

UITableView reloadRowsAtIndexPaths 图形故障

reloadRowsAtIndexPaths 的副作用?