2015-09-25 68 views
6

.DeleteSelf如何真正起作用?文件说:CKReference .DeleteSelf属性无效

当参考对象的操作设置为 CKReferenceActionDeleteSelf,基准即的目标,存储在参考的的recordId的 记录财产变成源记录的所有者 。删除目标(所有者)记录将删除其所有源记录 。

但我的印象是,删除目标并不总是删除源。当它仍然在容器中,客户端下载它,并且期望参考点位于某处,但在构建客户端上的服务器数据存储片时目标不存在时,它非常烦人。

你如何对待这种情况?你忽略了那种记录?或者定期查找CloudKit存储,搜索损坏的记录以删除它们?

或者不删除一条记录,最好是设置一个属性为已删除状态,但将其保留在数据库中?

+0

您应该可以依靠.DeleteSelf。如果它不起作用,那么你应该在http://bugreport.apple.com上创建一个错误报告。如果你想为这个错误创建一个解决方法,并且由于你正在控制你正在移除的那一刻发生的事情记录我认为最好还是在同一时刻手动删除所有相关记录。 –

+0

我也看到间歇性行为与.DeleteSelf –

+0

我遇到这个问题。我有几个与主表有一对多关系的表。在公共数据库中,我添加主记录,然后添加其他表中的一些记录。如果这一切都是从一个用户完成的,并且其他用户甚至无法访问数据,那么删除主记录会导致所有其他记录按预期被删除。但是,一旦其他用户访问数据,则级联删除不会发生,只会删除主记录。似乎毫无意义,如果你不能指望这个功能。 – rmaddy

回答

0

如果通过CloudKit控制板删除,则必须等待切换记录类型才能检查参考的另一端。在删除实际发生之前,您很可能已经切换了。您可以在网络选项卡上使用Safari的Web Inspector来检查删除实际完成的时间。删除多个记录需要很长时间。

1

我只是挣扎与这一个了一段时间,我想我会分享我的发现......

它本质上是一个权限问题。级联删除仅在删除记录的用户对所有需要删除的记录具有“写入”权限时才有效。 因此,在CloudKit Dashboard中,级联删除仅适用于使用开发人员的iCloud帐户创建的记录。

如果您需要删除不属于删除它们的用户的记录,则可以在安全性下为记录类型添加“写入”权限。

enter image description here

+0

我的记录位于同一个用户创建的同一个区域,引用仍然不会被删除。我认为这是CloudKit Dashboard中的一个错误。是的,它仍然在2017年底发生。:) –

相关问题