如何检测所有 controllerDidChangeContent 方法何时完成

How to detect when all controllerDidChangeContent methods finished

我正在使用 NSfetchedResultsController。

我需要在所有 controllerDidChangeContent 方法完成后向 CloudKit 发送更新。 在我的例子中,controllerDidChangeContent 方法被调用了几次,因为我从 CloudKit 收到了我的 tableView 中每条记录的更新,所以如果我在 controllerDidChangeContent 中调用 cloudKit 更新,每次更新行都会调用它。不好。

是否可以检测到 controllerDidChangeContent 何时完成所有更新并将我的 CloudKit 发送消息放入其中?

或者也许还有其他方法?

没有很好的方法来确定所有更新何时完成,因为 "all of the updates" 没有有意义的定义。您可以随时进行新的更新,因此始终可以为获取的结果控制器准备好新的更新。

要查看特定对象列表的更新何时完成,您可以执行类似

的操作
  1. 列出您将更新的对象 ID
  2. 每当获取的结果控制器收到更新时,从列表中删除受影响对象的对象 ID。
  3. 当列表为空时,您就完成了这组更新。

对于更通用的解决方案,您可以使用 NSTimer 仅在几秒钟内未收到新更新时触发更新。步骤为:

  1. 在您的 controllerDidChangeContent 中,检查计时器是否存在。如果没有,创建一个。
  2. 将计时器的 fireDate 设置为未来 5 秒(或您想要的任何秒数)。

每次收到更新时,您都会将计时器延迟 5 秒。如果 5 秒后没有更新,计时器将触发。