2010-09-03 51 views
0

我是一个非常舒适的CoreData用户。我遇到了一个绝对会让我失望的问题,弄清楚发生了什么问题,并且没有发现它为什么会导致我看到的问题。任何人都可以解释吗?奇怪的CoreData问题和更奇怪的解决方案。任何想法为什么?

好的,我们有一个主要的MOC,它执行大部分'只读'数据并处理简单的写入操作。当我们要做一个大的写入/导入/等,我们在一个新的线程上分配一个背景MOC,做所有繁重的工作,然后保存它。保存会导致我们的NSManagedObjectContextWillSaveNotification触发,然后mergeChangesFromContextDidSaveNotification:主MOC上的所有内容都会反映这些更改。相当标准。

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

保存后mergeChangesFromContextDidSaveNotification:会被调用,但主MOC不会反映更改。所以这有点奇怪。但关闭应用程序,然后再打开它,这些变化会神奇地在那里。什么!?!

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

关于这个主题的任何提示都会帮助大家。

回答

1

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

+0

但为什么KVO通知很重要?我没有特别注意任何事情,并且NSManagedObjectContextWillSaveNotification无论如何都在开火。 – beinstein 2010-09-04 16:32:53