0

我是一个非常舒服的 CoreData 用户。我遇到了一个绝对让我丧命的问题,我弄清楚出了什么问题,并且不知道为什么它会导致我看到的问题。谁能解释一下?

好的,我们有一个主要的 MOC,它可以完成大多数“只读”数据工作并处理简单的写入操作。当我们要进行大写/导入/等等时,我们在一个新线程上分配一个后台 MOC,完成所有繁重的工作,然后保存它。保存会导致我们的 NSManagedObjectContextWillSaveNotification 触发,然后我们 mergeChangesFromContextDidSaveNotification: 并且主 MOC 上的所有内容都会反映更改。很标准。

因此,几天前对 NSManagedObject 子类之一进行了更改。更改是 setValue:forKey: 中的调用。在该方法中没有进行特殊处理时,我们最初调用的是 [super setValue: forKey:]。它已更改为 [self setPrimitateValue: forKey:] 和...

保存后 mergeChangesFromContextDidSaveNotification: 会被调用,但主 MOC 不会反映更改。所以这有点奇怪。但是关闭应用程序然后再次打开它,更改就会神奇地出现。什么!?!

我知道持久存储保存更改但不是其他 MOC 存在一些问题。然后,当新的 MOC 创建新的发布时,一切都再次陷入困境。为什么?

任何关于这个话题的观点都会有所帮助。

4

1 回答 1

1

setPrimitiveValue:forKey:不会导致所有 kvo 通知触发。我认为这是你的问题的原因。您可能需要将其包裹起来willChangeValueForKey:didChangeValueForKey:调用。

于 2010-09-03T18:58:55.863 回答