2012-10-13 50 views
0

我正在試圖弄清楚如何獲取NSManagedObjects的列表,然後將它們傳遞給另一個視圖。將NSManagedObjects的數組傳遞給一個新的視圖

這裏是我取

+ (NSArray *)fetchListOfParentSectors; 
{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Sector"]; 
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"parent_id = -1"]]; 

    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
    [moc setPersistentStoreCoordinator: [[JobDataModel sharedDataModel] persistentStoreCoordinator]]; 

    NSError *error = nil; 
    NSArray *results = [moc executeFetchRequest:fetchRequest error:&error]; 
    if (error) { 
     NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]); 
     exit(1); 
    } 

    return results; 
} 

如果我把一個循環,這裏這裏登錄sector.name它完美的作品。

現在,在我的視圖控制器我有這樣的:

NSArray *objectArray = [FetchSectors fetchListOfParentSectors]; 
for (int i = 0; i < objectArray.count; i++) { 
    Sector *sector = (Sector *)[objectArray objectAtIndex: i]; 
    NSLog(@"name = %@", sector.name); 
} 
NSLog(@"objects = %@", objectArray); 

的名稱回報(空)日誌結果。我知道數組不爲空,因爲有返回的對象的正確數量和日誌這樣表示列出的一串對象:

"<Sector: 0xac91020> (entity: Sector; id: 0xac8e900 <x-coredata://19C94F15-0A5B-4A40-8E68-17FE6C4950F8/Sector/p4> ; data: <fault>)"

必須有那我俯瞰簡單的東西這裏..

回答

3

核心數據對象只能存在於託管對象上下文中。您在fetchListOfParentSectors本地創建MOC,但是(假設您使用ARC進行編譯),此MOC將在該函數結束時自動發佈。因此,當您訪問對象的屬性section.name時,MOC不再存在。

我本來期望這種情況的一些運行時異常,但實際上該屬性的訪問器返回剛剛nil(我已經驗證了一個小的測試程序)。

這使得因此沒有必要使用本地MOC in fetchListOfParentSectors。您應該使用全局MOC,或者在視圖控制器中創建一個,並將其作爲參數傳遞給您的獲取函數。

+0

感謝您提供合理而簡潔的回覆。我經常想知道全球moc是不是一個好主意,現在我知道了。 – squarefrog

相關問題