Jor*_*416 8 core-data ios icloud swift cloudkit
我正在构建一个严重依赖CloudKit进行数据同步的应用程序.每次应用程序启动时,它都会捕获使用a在服务器上进行的所有更改CKFetchNotificationChangesOperation
.这会成功返回已创建和/或修改的所有对象,但我现在处于这个阶段,我还希望我的应用程序根据这些消息删除记录.
在我的应用程序中,我存储在CoreData中的每个对象也携带该对象的在线表示的recordID.这样我就可以轻松获取需要修改的对象.
删除对象时这似乎很难,因为CloudKit只返回这些对象的recordID,并且不提供我可以用来知道我在CoreData数据库中查找的对象的recordType.
题
在具有多种记录类型的情况下,如何正确处理CloudKit"已删除"通知?
如果 CloudKit 没有向您提供任何已删除记录类型的指示,那么处理起来会很麻烦。在不知道实体类型的情况下,您无法删除 Core Data 中的对象,因此如果 CloudKit 没有给您任何线索,那么您需要检查可能具有recordId
.
删除过程与通常的 Core Data 相同。使用诸如“recordId = %@”之类的谓词执行获取请求来查找匹配的对象。如果找到一个,请将其删除。除非您必须对每个潜在实体重复此操作。
一种可能有帮助的方法是将 存储recordId
在一个新的、单独的实体中。创建一个名为明显的新实体CKRecordInfo
,并将其保留recordId
在那里。具有 CloudKit 信息的每个其他实体都与该实体具有一对一的关系。通过此设置,您将获取新实体的实例CKRecordInfo
,并删除与其相关的任何对象。
但与此同时,我还没有使用过 CloudKit,令人惊讶的是它只提供了有关记录类型的信息recordId
,而没有任何信息。如果可能的话,从通知中获取信息将是理想的选择。
归档时间: |
|
查看次数: |
317 次 |
最近记录: |