2010-09-03 49 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