我有一个NSFetchedResultsController支持的UITableView,它可以在任何时候触发更新。如果用户正在重新排序行,将这些更新将导致异常,因为表视图暂时接管,你会得到像当UITableView被重新排序时检测
Invalid update: invalid number of rows in section [...]
错误我如何检测,当用户已经开始移动的小区,所以我可以延迟更新结果控制器造成的更新吗?似乎没有任何表视图委托方法来检测这一点。该委托方法:
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
在用户首次分离的第一个单元格不会被调用,只有当他们实际移动到其他地方。
一种解决办法是检查所取得的成果回调isEditing
,只是做了散装reloadData
,而不是动态插入/删除行,但我不知道是否有一种方法专门为“重排”模式检查。
但可能tableview可能会调用,而不是在移动单元格之前。没有文件记录,在移动单元之前总是调用它,所以依靠这种行为不太可能是未来的证明。我的数据模型没问题,我正在以标准方式将更改合并到核心数据模型中,以便在主线程上正确发送更改请求。 – 2010-05-07 10:15:55
在UI移动单元格之前,每次调用此方法。数据模型驱动更改时不会调用它。唯一的目的是检查UI事件是否可以移动单元格。你将不得不设置标志来防止数据或用户改变表格,而另一个用户正在做它。你有一个竞争条件。 – TechZen 2010-05-07 16:17:19