手动阻止CloudKit同步和触发同步



CloudKit与核心数据的同步是一项非常耗费能源的任务,可能会快速耗尽电池。

据我所知,CloudKit在认为方便时会触发同步。我发现,在我的应用程序中,几乎每次我保存上下文时都会触发同步,这种情况很常见。

在我的情况下,只需要在某些事件发生后进行同步,而不是每次保存上下文时都进行同步。所以现在这是相当大的能源浪费。

由于我无法减少上下文保存的数量,我尝试实现一个逻辑,使我能够阻止同步,直到我再次释放它。

到目前为止,我还没有找到任何允许我这样做的内置方法。有什么想法吗?有没有一种方法可以在没有伤害的情况下暂时完全禁用CloudKit?

短期方法

1.用户手动关闭iCloud

应用程序的用户可以通过在iOS上执行以下操作来关闭应用程序的iCloud:

  1. 设置>iCloud>YourAppName
  2. 您将看到一个切换开关,用于关闭应用程序的iCloud使用

每个用户都必须手动完成

2.CloudKit Dashboard(关闭可见性(

警告:在关闭真实容器的可见性之前,请使用虚拟容器进行测试

  1. 转到CloudKit Dashboard
  2. 点击容器名称,会显示一个下拉列表
  3. 点击管理容器
  4. 警告:在关闭真实生产容器的可见性之前,请使用另一个容器进行测试

长期方法

从长远来看,你可以尝试以下最适合你的之一

1.不自动同步的独立实体

在CoreData模型上,创建一个单独的配置,并向该配置中添加一个实体。

将所有保存到新实体中(不会自动同步(,当您准备好将其移动到另一个使用默认配置的实体中时,该实体将进行同步。

您需要更改您的商店描述和该新配置的新商店描述。

参考:https://developer.apple.com/wwdc19/202

2.不要直接保存视图上下文,而是使用子上下文(不能100%确定(

如果保存viewContext,它将保存到文件并触发同步,而不是创建视图上下文的子上下文并将其保存在子上下文中

这样,您的视图将反映更改,但不会保存到磁盘,但您需要在应用程序退出或离开视图之前将其保存,这样用户就不会丢失数据。

3.改变你的逻辑,看看你如何将记录分组,然后一起保存

最新更新