删除 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 删除不起作用
将已删除的 CKRecord 与 CoreData NSManagedObject 协调一致