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

问题描述:

我正在使用NSfetchedResultsController。如何检测何时完成所有controllerDidChangeContent方法

当所有controllerDidChangeContent方法完成后,我需要将更新发送到CloudKit。 在我的案例中,controllerDidChangeContent方法被调用了好几次,因为我从CloudKit接收到了我的tableView中的每条记录的更新,因此如果我在controllerDidChangeContent中调用了cloudKit更新,则会调用它来更新每行。这是坏的。

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

或者也许有另一种方法呢?

没有好的方法来确定所有更新何时完成,因为没有对“所有更新”进行有意义的定义。您可以随时进行新的更新,因此可以随时为获取的结果控制器准备新的更新。

时看到更新对象的具体名单已经完成,你也许可以做到像

  1. 使对象ID的列表,你将更新
  2. 每次读取的结果控制器接收更新,从列表中删除受影响的对象的对象ID。
  3. 当列表为空时,您已完成该组更新。

对于更通用的解决方案,只有在几秒钟内没有收到新更新时,才可以使用NSTimer触发更新。步骤如下:

  1. 在您的controllerDidChangeContent中,检查计时器是否存在。如果没有,请创建一个。
  2. 将计时器的fireDate设置为将来5秒(或无论你想要多少)。

每当您进行更新时,您都会一直延迟计时器5秒。如果5秒钟没有更新通过,计时器将会启动。

+0

谢谢你的解释汤姆! – Adelmaer