CloudKit与核心数据的同步是一项非常耗费能源的任务,可能会快速耗尽电池。
据我所知,CloudKit在认为方便时会触发同步。我发现,在我的应用程序中,几乎每次我保存上下文时都会触发同步,这种情况很常见。
在我的情况下,只需要在某些事件发生后进行同步,而不是每次保存上下文时都进行同步。所以现在这是相当大的能源浪费。
由于我无法减少上下文保存的数量,我尝试实现一个逻辑,使我能够阻止同步,直到我再次释放它。
到目前为止,我还没有找到任何允许我这样做的内置方法。有什么想法吗?有没有一种方法可以在没有伤害的情况下暂时完全禁用CloudKit?
短期方法
1.用户手动关闭iCloud
应用程序的用户可以通过在iOS上执行以下操作来关闭应用程序的iCloud:
- 设置>iCloud>YourAppName
- 您将看到一个切换开关,用于关闭应用程序的iCloud使用
每个用户都必须手动完成
2.CloudKit Dashboard(关闭可见性(
警告:在关闭真实容器的可见性之前,请使用虚拟容器进行测试
- 转到CloudKit Dashboard
- 点击容器名称,会显示一个下拉列表
- 点击管理容器
- 警告:在关闭真实生产容器的可见性之前,请使用另一个容器进行测试
长期方法
从长远来看,你可以尝试以下最适合你的之一
1.不自动同步的独立实体
在CoreData模型上,创建一个单独的配置,并向该配置中添加一个实体。
将所有保存到新实体中(不会自动同步(,当您准备好将其移动到另一个使用默认配置的实体中时,该实体将进行同步。
您需要更改您的商店描述和该新配置的新商店描述。
参考:https://developer.apple.com/wwdc19/202
2.不要直接保存视图上下文,而是使用子上下文(不能100%确定(
如果保存viewContext,它将保存到文件并触发同步,而不是创建视图上下文的子上下文并将其保存在子上下文中
这样,您的视图将反映更改,但不会保存到磁盘,但您需要在应用程序退出或离开视图之前将其保存,这样用户就不会丢失数据。