核心數據懶惰地加載對象,它應該儘快引入任何對象,只要您嘗試引用它們。不過,我遇到了這個方案的一些問題。核心數據延遲加載問題
目的C 2.0以上的關係(集)可能會失敗(因爲在一組中的對象尚未裝載)和awakeFromFetch不叫對象快速枚舉直到由核心數據管理的對象的成員被觸摸。
舉例來說,如果我有NSManagedObject的子類,如關係:
@property (retain) NSSet* clips;
立即獲取該對象的實例後,如果我嘗試使用快速列舉像這樣的:
for (PClip* clip in self.clips) {
// do something with the clip
}
的循環體永遠不會執行。在調試器中可以看到,該組片段(在運行時_NSFaultingMutableSet的實例)最初是空的。
或者說我有一個是從持久狀態得到的剪輯對象的非持久成員:
@property (retain) NSString* filename
我與使用awakeFromFetch方法同步,這一點,但awakeFromFetch不叫,直到一些持久成員物體的首先被調用,因此,如果一些代碼試圖加載對象之前訪問此非持久值,它將尚未被定義(即會無)。
在獲取請求上使用setReturnsObjectsAsFaults:方法似乎沒有幫助。它不會出現強迫取所有連接到被提取對象物體的樹。
確保對象在使用之前加載的最佳方法是什麼?爲什麼快速枚舉無法使對象集加載?
今後請花時間適當地格式化問題中的代碼(使用「{}」編輯器控件)。 :-) – 2011-02-10 22:22:44