4

我比较精通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

有没有人遇到过这样的事情?我已经尝试清理所有目标,重新启动一切,甚至将模型更改为有问题的关系是一对一而不是一对多。没有任何区别。

4

1 回答 1

1

在我希望位于内存地址“指针”的对象已被其他东西替换的情况下,我之前遇到过“无法识别的选择器发送到实例 0x ...”错误。采取这种情况:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
NSString *someString = [NSString stringWithString:@"some string"]; // 自动释放的对象返回

[池排水];
[池释放];

/*
其他一些代码执行
*/

// 由于此时 someString 变量后面的字符串已被自动释放,因此 someString 指向的内存可能被其他数据类型占用。以下可能通过 EXC_BAD_ACCESS 错误,或者它可能会尝试在占用该内存空间的任何内容上执行选择器
int stringLength = [someString 长度];

这个例子非常简单,我的语义在这里可能有点偏离,但是这可能是你的情况以更复杂的方式发生的事情吗?也许尝试:

[[NSEntityDescription insertNewObjectForEntityForName:@"entityName" inManagedObjectContext:managedObjectContext] 保留]

看看会发生什么?

于 2010-04-29T21:14:39.897 回答