2010-06-13 27 views
3

docs如何在託管對象變成故障時正確處理KVO通知?

當核心數據變成一個對象變成 故障,鍵 - 值觀察(KVO) 變更通知(見鍵值 觀察編程指南)是爲對象的屬性發送 。如果您 被觀察到變成一個錯誤的對象 和 故障的性質隨後意識到,你 收到更改通知 屬性,其值已經不在 事實上改變。

因此,如果一個對象變成故障,核心數據確實發送KVO通知更改屬性?所以我必須經常檢查isFault == NO,然後纔開始對通知感到高興。

回答

5

這是一個解決方案。一個更好的解決方案是在物體變成故障時停止觀察物體。在實踐中,除了在內存不足的情況下,你知道什麼時候一個對象會變成一個錯誤並且可以計劃它。

+1

總結:我強烈建議不要使用NSManagedObject與KVO?因爲我不希望我的KVO依賴於錯誤並使任何粘合代碼使其與NSManagedObject一起使用。你會推薦什麼?核心數據編程指南中也沒有提示:(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html%23//apple_ref/doc/uid/TP30001202 – 2011-04-30 08:50:27

+0

一點都不知道,這只是一個學習邊界的問題。 – 2011-05-05 04:00:26

7

isFault不可靠,因爲當發送KVO通知時,isFault仍可能返回NO。您應該檢查faultingState

faultingState返回一個值,指示 接收器的故障狀態。

  • (NSUInteger)faultingState返回值0,如果該對象已完全初始化作爲管理對象,而不是轉換到或從 另一種狀態,否則某個其它值。

討論的方法允許你以確定是否接收到鍵 - 值觀察變化 通知當對象處於 過渡階段。