我是一个非常舒服的CoreData用户。我有一个问题,绝对杀了我,弄清楚出了什么问题,没有CLUE为什么它导致我看到的问题。谁能解释一下呢?
好的,我们有一个主要的MOC,可以处理大多数“只读”数据工作并处理简单的写操作。当我们要做一个大的写入/导入/等时,我们在新线程上分配一个后台MOC,完成所有繁重的工作,然后保存它。保存导致NSManagedObjectContextWillSaveNotification触发,然后我们mergeChangesFromContextDidSaveNotification:主MOC上的所有内容都反映了这些更改。很标准。
几天前,在一个NSManagedObject子类中进行了更改。更改是在setValue中调用:forKey:。当在该方法中没有进行特殊处理时,我们最初调用[super setValue:forKey:]。它被改为[self setPrimitateValue:forKey:]和......
保存后,mergeChangesFromContextDidSaveNotification:将被调用,但主MOC不会反映更改。所以这有点奇怪。但关闭应用程序,然后再次打开它,变化将神奇地存在。什么!?!
我知道持久存储保存更改而不是其他MOC存在问题。然后,当新的MOC创建新的启动时,一切都在沉没。为什么呢?
关于这一主题的任何启示都会有所帮助。
答案 0 :(得分:1)
setPrimitiveValue:forKey:
不会导致触发所有kvo通知。我认为这是你问题的原因。您可能需要将其包裹在willChangeValueForKey:
和didChangeValueForKey:
来电。