使用级联删除规则,CoreData
实体“ A”与 CoreData
条目“ B”的集合具有一对多关系。
在 iCloud
环境中,当设备1显示一个“ B”条目的详细视图时,设备2删除“ A”条目。
当设备1接收到 NSPersistentStoreDidImportUbiquitousContentChangesNotification
通知时,其应用程序代理调用 mergeChangesFromContextDidSaveNotification
,然后广播一个内部通知,该通知由视图控制器捕获,显示条目“ B”的细节(代码在应该使用 performBlock
的地方使用)。
However, although entry "A" is indeed nullified when the detail view controller receives the internal notification, entry "B" still exists as a valid CoreData
object. It seems that the Cascade rule hasn't completed its operation yet. Therefore the view controller in device 1 isn't aware of the delete, which may lead to unexpected results.
当基本数据已经合并但级联规则尚未完成时,mergeChangesFromContextDidSaveNotification
似乎提前返回。
当通知到达时,我尝试刷新条目“ B”,同时临时将托管对象上下文的 stalenessInterval
设置为零,这样就不会使用缓存的对象,但我仍然从存储中获得有效条目“ B”。
此时检查 null
条目“ A”不是一个选项,因为这种情况比我在这里描述的要复杂一些,并且空条目“ A”在某些情况下可能是有效的。
我尝试在合并更改之后和向视图控制器发送内部通知之前引入延迟。我发现2秒钟的延迟是没用的,但是10秒钟的延迟是有用的。
但我不想指望这次延误。这是一个没有太多数据的测试环境,我不知道在生产环境中会发生什么。依靠实验延迟似乎不是正确的做法。
有正确的事吗? 还是我一开始就做错了?