2

我有一个使用 iCloud 和 Core Data 的应用程序NSPersistentCloudKitContainer。容器和相关代码在一个共享框架中,大多数东西都运行良好。除了应用程序本身,我还有一个共享扩展和一个意图扩展。

我遇到的问题是,如果其中一个扩展在应用程序处于活动状态时写入数据库。NSPersistentCloudKitContainer似乎在这两个过程中都做了一些魔术,当它发现魔术已经完成时,它无法更新某些数据。例如,我在两个托管对象之间存在一对一的关系(需要与 cloudkit 支持的模型相反)。关系的一侧变为有效,而另一侧为零。

我在控制台中收到错误消息说 CloudKit+CoreData 无法合并数据库和容器缓存之间的差异。我很确定这是一个疏忽,NSPersistentCloudKitContainer没有考虑到这个特定场景(共享框架、多个开放进程)。

有没有人幸运地使用NSPersistentCloudKitContainer和保存来自扩展的关系的数据?

4

1 回答 1

0

假设您的 SQLite 存储文件位于 App Group 容器中……您是否尝试过仅在应用程序中使用 NSPersistentCloudKitContainer 并在扩展程序中使用常规 NSPersistentContainer?您可以将参数传递给您的共享框架类 init。而且你可能需要像云容器一样打开持久跟踪和远程通知,这样当应用程序启动时,CoreData 框架可以找到历史中的变化,然后将它们导出到 CloudKit 进行镜像。

这里的根本问题是,如果有 2 个完整的应用程序(不是应用程序 + 扩展程序)都可以同时使用 NSPersistentCloudKitContainer 和应用程序组容器中的商店吗?例如在 macOS 上或 iPadOS 上的分屏。它是否被设计为一次只能从一个应用程序同步?我会看看我是否能弄清楚并更新我的答案。

于 2021-04-24T14:26:33.497 回答