2010-06-05 45 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

相关问题