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

时间:2017-09-22 14:44:58

标签: ios swift core-data nsfetchedresultscontroller

我正在使用NSfetchedResultsController。

我需要在所有controllerDidChangeContent方法完成后向CloudKit发送更新。 在我的案例controllerDidChangeContent方法中多次调用,因为我从CloudKit接收了tableView中每条记录的更新,所以如果我在controllerDidChangeContent中调用cloudKit更新,则每次更新都会调用它。这很糟糕。

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

或许还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

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

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

的操作
  1. 列出要更新的对象ID
  2. 每次提取的结果控制器收到更新时,请从列表中删除受影响对象的对象ID。
  3. 当列表为空时,您已完成该组更新。
  4. 对于更通用的解决方案,只有在几秒钟内未收到任何新更新时,您才可以使用NSTimer来触发更新。步骤将是:

    1. controllerDidChangeContent中,检查计时器是否存在。如果没有,请创建一个。
    2. 将计时器的fireDate设置为将来5秒(或者您想要多少)。
    3. 每次获得更新时,您都会在未来5秒钟内延迟计时器。如果5秒没有更新,则计时器将会激活。