这是一个常见的场景:app是第一次安装并需要一些初始数据。您可以将其捆绑在应用程序中,并从plist或其他东西或CSV文件加载。或者您可以从远程商店获取它。
我想从CloudKit获取它。是的,我知道CloudKit不会被视为远程数据库,而是一个集线器。我很好。坦率地说,我认为这个用例是该策略中唯一的漏洞之一。
想象一下,我有一个对象图,我需要在基础上有一个类,然后是3或4个相关的类。我希望新用户安装该应用程序,然后获取此类的最新版本。如果我使用CloudKit,我必须使用单独的fetch加载每个实体并组装整个实体。它很丑陋而不是通用的。一旦我这样做,我将进入更改跟踪模式。收听更新并同步我的本地副本。
在某些方面,这类似于您在Android上使用服务所面临的挑战:假设我有天气预报服务。当我订阅它时,直到它创建下一个新的预测时我才会得到天气。为了解决这个问题的不足,Android Services SDK允许我制作“粘性”服务,在那里我可以获得订阅时生成的服务的最后一条消息。
我正在考虑以通用方式执行类似操作:可以使用版本标记保存某些对象图的快照(可能是JSON),然后对于初始加载,只需能够获取它们并将它们转换为CoreData对象图在本地。
问题是这个策略是否有意义,或者我应该抓住我的鼻子,用嵌套查询写下厄运代码的金字塔? (不建议使用CoreData同步,因为已弃用。)
你的问题有点陈旧,所以你可能已经开始了,但我想我会建议一个选项。
您可以在CloudKit容器的Public数据库中创建一个名为Data
的记录类型。在Data
中,你可以有一个名为structure
的字段,它是一个String
(如果你想附加一个JSON文件,可以是CKAsset
)。
然后在每个应用程序加载时,查询公共数据库并下拉具有类定义的structure
字符串,并按照您的喜好使用它。由于它位于公共数据库中,因此您的所有用户都可以访问它。祝好运!