检测 UITableView 何时被重新排序

Mik*_*ler 5 iphone uitableview

我有一个由 NSFetchedResultsController 支持的 UITableView,它可以随时触发更新。如果用户当前正在重新排序行,应用这些更新将导致异常,因为表视图已临时接管,您会收到类似的错误

Invalid update: invalid number of rows in section [...]
Run Code Online (Sandbox Code Playgroud)

如何检测用户何时开始移动单元格,以便延迟由获取的结果控制器引起的更新?似乎没有任何表视图委托方法来检测这一点。这个委托方法:

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
Run Code Online (Sandbox Code Playgroud)

当用户最初分离第一个单元格时不会被调用,只有当他们实际将它移动到其他地方时才会调用。

一种解决方案是检查isEditing获取的结果回调并只执行批量操作reloadData而不是动态插入/删除行,但我想知道是否有一种方法可以专门检查“重新排序”模式。

Tec*_*Zen -1

在表移动一行之前,它会发送...

\n\n
\xe2\x80\x93 tableView:canMoveRowAtIndexPath:\n
Run Code Online (Sandbox Code Playgroud)\n\n

...其数据源。您可以在那里放置一个编辑锁,该锁将在单元格实际移动之前生效。

\n\n

您可能需要重新考虑一下您的设计。听起来您有一个数据模型,可以同时由两个不同的源修改。如果是这样,那么您需要在其中设置某种并发锁以便这两个修改实际上不能同时发生。同时修改不仅会导致 UI 出现问题,还会导致使用数据模型的任何内容出现问题。

\n