删除 CKRecord:记录删除将违反验证引用,拒绝更新

Posted

技术标签:

【中文标题】删除 CKRecord:记录删除将违反验证引用,拒绝更新【英文标题】:Deleting CKRecord: Record delete would violate validating reference, rejecting update 【发布时间】:2017-12-12 15:44:26 【问题描述】:

我只是尝试删除CKRecord。在我将它分配为父级并引用另一个 ckrecord 之前,如下所示:

    let rID = CKRecordID(recordName: territory.identifier, zoneID: territory.recordZoneID)
    let record = CKRecord(recordType: "Territory", recordID: rID)

    if let territoryGroup = territoryGroup 
        let recordID = CKRecordID(recordName: territoryGroup.identifier, zoneID: CloudAssistant.shared.zone.zoneID)
        record.parent = CKReference(recordID: recordID, action: .none)
        record["territoryGroup"] = CKReference(recordID: recordID, action: .none)
    

错误如下:

“删除记录时出错:记录删除将违反验证引用 ([C1A31F1D-914F-4007-8C8B-73FC0503C798, ...]),拒绝更新”

这是为了删除记录而不删除其子记录,这就是为什么我在那里设置操作.none 而不是.deleteSelf

怎么了?

仪表板中的相同:

对应的参考记录有很好的设置:

如您所见,删除 Self 未被选中。我错过了什么吗?对我来说,它应该毫无问题地删除它。

【问题讨论】:

在 CKRecord 设置父属性创建记录的层次结构。我想无论您选择 .none 还是 .deleteSelf 作为操作,都已经设置了层次结构。尝试评论该行,因为您自己使用 regionGroup 记录属性完成了层次结构。也许这行得通... 【参考方案1】:

当我使用setParent(parentRecordID) 设置记录的父级并使用.none 创建一个CKReference 时,我遇到了同样的错误。看起来如果您设置父级,则必须在标准参考上使用.deleteSelf。但是,据我所知,仅当您想使用CKShare 时才需要设置父级。我写了更多关于它here。

【讨论】:

【参考方案2】:

解决此问题的方法是将另一个引用设置为非父属性。此引用已启用 .deleteSelf。

看到这个答案

Cannot delete CKRecords with .parent set

【讨论】:

以上是关于删除 CKRecord:记录删除将违反验证引用,拒绝更新的主要内容,如果未能解决你的问题,请参考以下文章

JAVA hibernate中删除表遇到主键被外键引用,违反完整约束条件,不能删除的问题 2张表,一张主表user,有

通过 CKSubscription 观察 CKRecord 删除不起作用

快速从 Cloudkit 中删除 CKRecord

将已删除的 CKRecord 与 CoreData NSManagedObject 协调一致

错误:删除表违反外键约束。密钥 id 仍然从表中引用(很多)

如何删除 CKRecord