2013-04-04 48 views
0

我有一個永久存儲的核心數據結構< - >主線程上下文< - >私有線程上下文(用作scratchpad)。NSManagedObjectContext objectWithId不返回對象,儘管有效的objectId

我的用戶按下「保存」創建並在「私人線程」 /便箋背景下配置一本雜誌的對象之後。

我取帳戶當前登錄從主線程上下文,因爲新的雜誌將被創建必須分配一個賬號。

Account* accountForMagazine = [self.accountsConnector getSelectedAccount]; 
NSLog(@"object id: %@",accountForMagazine.objectID); 

對象ID的NSLog輸出爲:

0xa677790 <x-coredata://F635CE5A-C335-48F0-BB27-61B7D9XXXXD8/Account/p4> 

所以它的永久ID和告訴我,對象是在持久存儲。

然後我切換到專用線程(databaseConnector只是一個私有線程上的託管對象上下文的包裝),並嘗試將該帳戶對象帶到該線程,以便它可以分配給正在發送的雜誌對象被保存。

[self.databaseConnector executeOnCorrectThread:^ 
{ 
    Account* account = (Account*)[self.databaseConnector.getContext objectWithID:accountForMagazine.objectID]; 
    self.magazine.account = account; 
    if(!account) { NSLog(@"nil account"); } 
    [self.databaseConnector save]; 
} 

遇到的問題即時消息是,雖然被保存在新雜誌的對象,並能夠進入持久性存儲,他們沒有連接到一個帳戶!當然,每次都會顯示NSLog語句 - 表示此線程上的帳戶對象爲零。

所以,即使我有一個有效的objectID,因此對象持久存儲存在,我不是通過objectWithId私人線程得到一個帳戶對象。

任何想法,這是爲什麼?

感謝

Vb的

回答

3

東西在裏面是nil,你不期望得到nil

原因如下:objectWithID:總是返回一個對象。但你得到nil。最可能的原因是,self.databaseConnector.getContext實際上是在該塊返回nil。這可能是accountForMagazinenil,但如果這是唯一的意外nil那麼你的應用程序將崩潰(不能通過nil該方法和生活)。

+0

我認爲你是到這裏的東西,因爲objectWithID:應該拋出一個異常,如果給定ID的對象不存在。 – svena 2013-04-05 07:07:59

+0

你說得對,getContext返回零。謝謝。 – Vazzyb 2013-04-05 20:16:54

相關問題