如何在CoreData Context合并后获取对象

Emm*_*toc 5 iphone cocoa core-data

我试图保存数据并与CoreData和多线程的iPhone应用程序合并.但合并后我无法在主线程中获取托管对象.

我编写的代码如下:

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

[self performSelectorOnMainThread:@selector(didMerged:) withObject:objectIds waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)

所以我试图传递objectIds来获取主线程中的NSManagedObject实例,这些实例是在另一个线程中生成的.起初我尝试了"objectWithId"方法,但它生成了故障对象.然后我尝试了"existingObjectWithID"方法,但它部分生成了对象,其他的则是nil,后面跟着Error:

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

怎么了?有没有办法在另一个线程中合并后如何通过objectIds检索所有对象?

谢谢.

Dan*_*iel 7

有两种类型的对象ID.在保存NSManagedObject之前,它具有临时对象ID.保存后,它是固定的.所以你可能会使用错误的ID ...

在此处阅读托管对象ID和URI:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html


Mar*_*ger 2

您的上下文合并似乎失败了。

有关错误 133000 的开发人员文档

NSManagedObjectReferentialIntegrityError = 133000

NSManagedObjectReferentialIntegrityError 错误代码,表示尝试引发指向不存在的对象的故障。存储可以访问,但找不到故障对应的对象。适用于 Mac OS X v10.4 及更高版本。在 CoreDataErrors.h 中声明。