2010-06-05 78 views
5

我試着保存數據並與CoreData和多線程合併爲iPhone應用程序。 但我無法在合併後在主線程中獲取託管對象。如何在CoreData上下文合併後獲取對象

我寫代碼就像這樣:

[managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
             withObject:notification 
            waitUntilDone:YES]; 

[self performSelectorOnMainThread:@selector(didMerged:) withObject:objectIds waitUntilDone:YES]; 

所以我試圖通過的ObjectID得到NSManagedObject實例中是在另一個線程產生的主線程。起初我嘗試了「objectWithId」方法,但它產生了錯誤對象。然後我嘗試了「existingObjectWithID」方法,但它生成的對象部分和其他人零以下錯誤:

[Error] Error Domain=NSCocoaErrorDomain Code=133000 "Operation could not be completed. (Cocoa error 133000.)" 

什麼是錯?有什麼辦法如何在合併到另一個線程後通過objectIds檢索所有對象?

謝謝。

回答

2

看來你的上下文合併失敗。

developer documentation on error 133000

NSManagedObjectReferentialIntegrityError = 133000

NSManagedObjectReferentialIntegrityError Error code to denote an attempt to fire a fault pointing to an object that does not exist. The store is accessible, but the object corresponding to the fault cannot be found. Available in Mac OS X v10.4 and later. Declared in CoreDataErrors.h.

+0

謝謝您的回覆快。 嗯...在另一個線程中,我可以保存數據沒有任何錯誤。如何在不存在#133000錯誤的情況下將它們合併到主線程中的上下文中? – Emmettoc 2010-06-05 16:50:20

0

首先,你需要解開你的錯誤。更改輸出爲:

NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]); 

這會給你更多的信息。

其次,如果你在多個線程中使用單個上下文,那麼你做錯了。您需要查看有關Core Data和線程的文檔。基本規則是:每個線程一個上下文;期。如果您需要跨多個線程管理數據,請查看主線程後臺線程中的保存通知。我建議在Mac開發人員網絡上查看我的文章,以獲取相關示例。

+0

謝謝。我會詳細檢查錯誤。是的,我爲每個線程創建了上下文。 – Emmettoc 2010-06-08 00:50:10

相關問題