4

我有一個NSManagedObject的一些屬性在程序的開始初始化。當我稍後提到這個對象時,它看起來是錯誤的,並且這些屬性是不可訪問的。我不知道我需要做什麼。NSManagedObject Faulted

這與添加到程序中的新功能有關,該程序一直以其他方式使用核心數據平穩運行。

這裏是一個代碼片段,它被初始化爲單例的屬性值。 (這個單是我的代碼很多地方訪問):

favoritesCollection = [[SearchTerms alloc] initWithEntity:[NSEntityDescription entityForName:@"SearchTerms" inManagedObjectContext:moc] insertIntoManagedObjectContext:moc]; 

    favoritesCollection.keywords = @"Favorites List"; 
    favoritesCollection.isFavoritesCollection = [NSNumber numberWithBool:YES]; 
    favoritesCollection.dateOfSearch = [NSDate NSCExtendedDateWithNaturalLanguageString:@"4000"]; 
    favoritesCollection.pinColorIndex = 0; 

    [moc save:&error]; 

    NSLog(@"(favoritesCollection) = %@", favoritesCollection); 
} 

return favoritesCollection; 

當我看着favoritesCollection與NSLog的,我看到這個(我加了一些新行,以方便閱讀):

(favoritesCollection) = 
<SearchTerms: 0x5c28820> 
(entity: SearchTerms; id: 0x5a6df90 
<x-coredata://3936E19F-C0D0-4587-95B6-AA420F75BF78/SearchTerms/p33> ; 
data: { 
    dateOfSearch = "4000-09-25 12:00:00 -0800";...*more things after this* 

返回後,另一個NSLog顯示內容完好無損。

當我提到這個例子後,我可以在調試器中看到這一點:

<SearchTerms: 0x5c28820> 
(entity: SearchTerms; id: 0x5a6df90 
<x-coredata://3936E19F-C0D0-4587-95B6-AA420F75BF78/SearchTerms/p33> ; 
data: <fault>) 

,這一切。

所以我相信該對象是保留的(我明確保留它返回的地方)。我有殭屍,它看起來不像殭屍。

我在程序中只有一個managedObjectContext,在單例中維護。

那麼發生了什麼事情,以及如何獲得已保存的屬性?

回答

0

更多細節我有點晚纔到這一點,但我發現在我的計劃有些步驟是無序。不是刪除數據庫內容(我現在每次啓動時都會執行的操作),然後創建並添加此實體,而是創建並添加了實體,然後刪除了數據庫內容。

指向favoritesCollection實體的指針在程序的整個生命週期中保存,所以我期望它能夠在創建後的任何時候看到它的內容。

從核心數據編程指南

故障處理是透明的,你沒有執行取到 實現了故障。如果在某個階段訪問了對象故障 的持久性屬性,則核心數據會自動檢索該對象的數據 並初始化該對象(請參見NSManagedObject類 不引發錯誤的方法列表的引用)。 這個過程通常被稱爲觸發故障。

核心數據在必要時自動觸發故障(當訪問故障的持久性 屬性時)。

從我通過閱讀編程指南可以看出,在查看任何特定實體時發現關係錯誤(與其他實體的鏈接)是正常的。但是沒有提到在持久性屬性值上看到錯誤。我相信,一般來說,如果對象在內存中,那麼它的屬性不應該是錯誤的,但它的關係可能是錯誤的。

favoriteCollection實體完全故障(屬性和關係)並且故障未得到解決的事實顯示了一個問題。在這種情況下,它與數據庫中不再存在的實體一致。

0

故障是CoreData鬆散鏈接到其他實體的方式。只需通過屬性或valueGorKey訪問值,你會看到它們及時填充。