我相对精通CoreData,并且几年来一直使用它很少或没有困难。突然间,我现在被一个错误所困扰。对于我的生活,我无法弄清楚为什么
insertNewObjectForEntityForName:inManagedObjectContext:
突然返回某种奇怪的NSNumber实例。 GDB说返回的对象是NSManagedObject的正确自定义子类,但是当我去打印NSManagedObject本身的描述时,我收到以下错误:
*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50
更奇怪的是,我能够使用setValue设置一些关系和属性:forKey:一切都很好。但是当我尝试设置一次特定的关系时,我收到了这个错误:
*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50
以前有没有遇到过这样的事情?我已经尝试清理所有目标,重新启动所有目标,甚至将模型更改为有问题的关系是一对一而不是一对多。没有任何区别。
答案 0 :(得分:1)
我遇到了“无法识别的选择器发送到实例0x ...”错误之前,在我希望在内存地址“指针”处的对象已被其他东西替换的情况下。采取这种情况:
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; NSString *someString = [NSString stringWithString:@"some string"]; // autoreleased object returned [pool drain]; [pool release]; /* some other code executes */ // since the string behind the someString variable has been autoreleased at this point, the memory that someString points to may be occupied by some other data type. the following may through an EXC_BAD_ACCESS error, or it may try and execute the selector on whatever is occupying that memory space int stringLength = [someString length];
这个例子非常简单,我的语义可能有点偏离,但是这可能是你的情况下更复杂的情况吗?也许试试:
[[NSEntityDescription insertNewObjectForEntityForName:@"entityName" inManagedObjectContext:managedObjectContext] retain]
看看会发生什么?