Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c CoreData-按实体的ObjectID检索实体时无法识别的选择器_Objective C_Core Data - Fatal编程技术网

Objective c CoreData-按实体的ObjectID检索实体时无法识别的选择器

Objective c CoreData-按实体的ObjectID检索实体时无法识别的选择器,objective-c,core-data,Objective C,Core Data,我正在开发一个应用程序,它使用多个线程进行一些密集的计算,并获取大量数据。因此,在使用CoreData设计我的应用程序时,我试图成为一名优秀的小开发人员,并遵循以下原则。基本上,我有一个运行和获取数据的NSOperation。它(向主线程中的一个方法)返回一个NSMutableSet,其中包含每个返回实体的NSManagedObjectID 下面是主线程中的方法,我想再次将那些NSManagedObjects转换为实际的NSManagedObject子类: -(void)updateLocalC

我正在开发一个应用程序,它使用多个线程进行一些密集的计算,并获取大量数据。因此,在使用
CoreData
设计我的应用程序时,我试图成为一名优秀的小开发人员,并遵循以下原则。基本上,我有一个运行和获取数据的
NSOperation
。它(向主线程中的一个方法)返回一个
NSMutableSet
,其中包含每个返回实体的
NSManagedObjectID

下面是主线程中的方法,我想再次将那些
NSManagedObject
s转换为实际的
NSManagedObject
子类:

-(void)updateLocalContextWithObjectIDs:(NSMutableSet *)idSet {

    NSMutableSet *entitySet = [[NSMutableSet alloc] init];

    for (NSManagedObjectID *objectID in idSet) {

        [entitySet addObject: (Person *)[[self.dataProvider sharedManagedObjectContext] objectWithID:objectID]];

    }

    self.entitySet = entitySet;
    [entitySet release];

}
我遇到的问题是,当此循环运行时,我遇到以下错误:

-[Person persistentStore]: unrecognized selector sent to instance 0x619b270
知道为什么会这样吗?调用
Person
对象上的
persistentStore
不是由我完成的--它必须发生在
CoreData
中,我没有正确执行某些操作

提前感谢。

如何解决“无法识别的选择器发送到实例0xXXXX错误”
  • 在代码中查找调用
    persistantStore
    的位置。然后找到你过度释放那个物体的地方

  • 如果找不到过度释放对象的位置,请运行

  • 解释
    即使您的代码没有在
    上调用
    持久存储
    ,您的计算机仍然是。Objective-C是一种动态语言,您的计算机有一个指向
    Person
    对象的指针,它正在向该对象发送
    persistantStore
    。这通常发生在你过度发布了不该发布的内容时。对象已消失,一个新对象已替换它,但指针仍保留,因此当您向该指针发送消息时,它指向现在在内存中占据该位置的对象。

    问题是我传入了一组
    NSManagedObject
    s,而不是像我应该传递的
    NSManagedObjectID
    s


    这就解决了。

    “即使你没有给某人打persistantStore电话,你的电脑也是。”-这正是我所说的。我不是说苹果的代码不好。我知道那是我的,只是不知道具体在哪里。对不起,我差点没读到你的问题。现在修复,答案也适用于以后可能阅读此内容的任何其他人。