gpt4 book ai didi

ios - CoreData + iCloud + 级联删除 - 如何处理?

转载 作者:IT王子 更新时间:2023-10-29 07:31:14 32 4
gpt4 key购买 nike

CoreData 实体“A”与 CoreData 条目“B”的集合具有一对多关系,使用级联删除规则。

iCloud 环境中,当设备 1 显示“B”条目之一的详细 View 时,设备 2 删除了“A”条目。

当设备 1 收到 NSPersistentStoreDidImportUbiquitousContentChangesNotification 通知时,其 App Delegate 调用 mergeChangesFromContextDidSaveNotification 然后广播一个内部通知,该通知由 View Controller 捕获,显示条目的详细信息“B”(代码在应该使用的地方使用 performBlock)。

但是,虽然在细节 View Controller 收到内部通知时条目“A”确实无效,但条目“B”仍然作为有效的 CoreData 对象存在。 Cascade 规则似乎还没有完成它的操作。因此,设备 1 中的 View Controller 不知道删除,这可能会导致意外结果。

当基础数据已合并但级联规则尚未完成时,

mergeChangesFromContextDidSaveNotification 似乎过早返回。

我尝试在通知到达时刷新条目“B”,同时暂时将托管对象上下文的 stalenessInterval 设置为零,这样就不会使用缓存的对象,但我仍然得到一个有效的来自商店的条目“B”。

此时检查 null 条目“A”不是一个选项,因为情况比我在这里描述的要复杂一些,并且 null 条目“A”在某些情况下可能有效例。

我试图在合并更改之后和将内部通知发送到 View Controller 之前引入延迟。我发现延迟 2 秒没有帮助,但延迟 10 秒有效。

但我不想依赖这种延迟。这是一个没有太多数据的测试环境,不知道生产环境会怎么样。依靠实验性延迟似乎不是正确的做法。

有对的吗?还是我一开始就做错了什么?

最佳答案

根据经验,收听 NSManagedObjectContextDidSaveNotification 以外的通知是一团糟,可能导致依赖尚未更新的属性。详细 View Controller 应该监听 NSManagedObjectContextDidSaveNotification 通知,这些通知在应用级联后抛出。然后,您可以通过多种方式检查当前对象是否有效(您可以检查当前对象的托管对象上下文是否为 nil,或者您可以执行提取并查看对象是否存在于商店)。

关于ios - CoreData + iCloud + 级联删除 - 如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557986/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com