DeleteSelf
The delete action for referenced records. Deleting a record also deletes any records containing CKReference objects that point to that record. The deletion of the additional records may trigger a cascade deletion of more records. The deletions are asynchronous in the default zone and immediate in a custom zone.
所以我一直在测试这个,我使用CloudKit仪表板和使用我的应用程序创建了多个CKReference对象.每当我使用我的应用程序执行此操作时,我都会像这样创建引用:
let reference:CKReference = CKReference(recordID: savedFriend.friendID,action: CKReferenceAction.DeleteSelf)我知道它被分配为删除自己,因为在仪表板中它显示选中的选项:
我必须做错事,因为无论何时我去手动删除使用仪表板引用的记录,或者设置我的应用程序以编程方式删除它,记录都会消失,但引用永远不会被删除.我想也许我应该等待,它最终会发生,但几小时后它仍然在那里检查,就像它本应该删除自己.这有点令人沮丧,因为我设计了一些我的代码,假设这可行,现在我可以有一个浪费资源的应用程序试图找到一个不存在的CKRecord.我应该不依靠这个来工作吗?我感谢任何帮助或建议.
更新〜04/07/2016
我跳了回来,并发布了一个更新,问题已经解决了.我并不完全相信这个问题不会重新出现,所以我昨晚寻求一些保证.我创建了5个不同的CKRecords并创建了各种不同的CKReference对象,以便在整个数据库中引用它们.然后我继续在每个引用上设置CKReferenceAction.DeleteSelf选项(我通过仪表板手动尝试了两个,其他三个以编程方式完成).无论如何,我等了几分钟然后删除了引用的记录……十分钟后,引用仍然存在.我又等了5-10分钟,他们还在那里,所以我上床睡觉,假设早上他们肯定要走了,对吧?错误! 12个小时后,CKReference条目仍然存在,引用的记录仍然消失.我肯定是在摸不着头脑,好像这是CloudKit的一个错误.我应该提一下,我也注意到我的仪表板中有一些奇怪的行为.在过去的四天左右,在左下角,它一直表示它是“重新索引开发数据”,这里是一张图片,例如:
这会导致这个问题吗?有人熟悉这个问题并知道解决这个问题的方法吗?任何建议,将不胜感激.我已经向Apple提交了一份错误报告.
解决方法
只有在删除记录的用户对所有需要删除的记录具有“写入”权限时,才能执行级联删除.因此,在CloudKit仪表板中,级联删除仅适用于使用开发人员的iCloud帐户创建的记录.
在那里看到我的答案:https://stackoverflow.com/a/38606004/6643055