我有一个可以下载大文件的应用程序。每个文件都有一个相应的NSManagedObject,它的下载进度经常通过NSManagedObjectContext保存更新。
最初我试图避免多个线程以简化,但这导致了UI响应问题,所以我实现了一个后台线程来保存进度更新。这些是在后台MOC中进行的唯一更新。
当然,现在我必须在我的背景MOC和我的主要MOC之间合并更改。因此,我设置了一个通知监听器,以便以两种方式获取更改,以使每个MOC保持有效状态。
在这里,事情开始让我感到困惑。我希望这种合并非常简单。 MOC处理的模型更改是互斥的(当然,除了创建和删除对象之外)。换句话说,不应该有冲突,因为没有对象会从两个MOC接收对同一属性的更改。
我为两个MOC玩过各种合并政策,并遇到两个问题之一。要么我得到合并冲突(这对我来说没有意义,如上所述),或者我的更改没有反映在我使用NSFetchedResultsControllers并且以前工作正常的UITableViews中。在后一种情况下,只有当合并从main进入并且合并到后台MOC(看似无论如何)时才会反映更新。
我毫不犹豫地发布我的代码,因为它现在有点混乱,无论如何都是专有的,但如果需要的话,我会这样做。首先,我在这里概念性地遗漏了什么吗?哪种合并策略类型在这里最有意义?在这种情况下我是否需要合并两种方式,或者我是否应该通过单向合并(背景 - > main)来实现?