我如何根据CKQueryNotification了解要删除的实体?

时间:2016-12-06 13:36:28

标签: ios swift cloudkit

我在Cloudkit中有两种记录类型:服务目标,它对应于coredata模型中的实体:ServiceGoal。我可以创建,更新或删除它们。问题是删除。

我使用CloudKit获取待处理的通知。我可以确定它基于queryNotificationReason属性的操作类型。如果是删除,则无法确定应从具有相关ID的核心数据数据库中删除哪种属性。

任何方式如何做到这一点?到目前为止,我从CKQueryNotification得到的recordID就是这样做的:

class func delete(with recordID: CKRecordID) {

    MagicalRecord.save({ context in

        if let service = Service.find(withIdentifier: recordID.recordName, in: context) {

            service.mr_deleteEntity(in: context)

        } else if let goal = Goal.find(withIdentifier: recordID.recordName, in: context) {

            goal.mr_deleteEntity(in: context)
        }
    })
}

1 个答案:

答案 0 :(得分:1)

删除的查询通知只会为您提供CKRecordID。这意味着记录ID必须包含处理删除时需要知道的所有信息。

我通过创建包含记录类型和密钥的记录ID来解决此问题。然后在需要时,我可以将记录ID的recordName拆分为实体名称和密钥,并根据需要使用这些值。