9

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

我已经尝试了从清理所有目标到重新启动 Mac 和 iPhone,甚至编辑模型以使所讨论的关系是一对一而不是一对多的一切。无论我做什么,都会出现同样的问题。有没有人见过这样的东西?

4

4 回答 4

14

我遇到了同样的问题:我向我的数据库实体的父实体添加了一个名为“isDatabase”的方法(返回一个 BOOL),该实体有一个名为“数据库”的关系。将“isDatabase”重命名为“isOfTypeDatabase”解决了这个问题。所以还要继续寻找父实体!

于 2012-11-23T11:49:16.780 回答
2

我在一个NSManagedObject子类上定义了一个属性,该属性与在该类上定义的关系的名称发生冲突。

这是我的代码MyManagedObjectSubclass+Custom.h

@property (readonly, nonatomic) BOOL isSeason;

这是 XCode 为 MyManagedObjectSubclass.h 生成的代码

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

请注意isSeason,通过 KVC,将与季节名称发生冲突

于 2013-01-05T19:23:54.373 回答
1

我遇到了完全相同的问题,在拔掉头发一整天后,我解决了我的问题。

我认为问题与损坏的属性/关系有关,NSCFNumber 实际上是在寻找该属性/关系的 objectID。就我而言,我可以使用 valueForKey: 来查找所有属性/关系,尽管我称为“文件”的关系似乎已损坏。

我终于意识到我已经扩展了 NSObject 以包含一个布尔“isFile”方法,并且不知何故这会干扰 CoreData 并导致它返回一个损坏的对象,或者无法正确处理它拥有的对象。我的猜测是CoreData 必须动态创建“isXXX”方法。

我可以通过删除 isFile 方法或重命名我的属性来解决问题。

于 2011-11-08T20:58:38.987 回答
0

objectID 和实体选择器是 on NSManagedObject,而不是NSCFNumber(or NSNumber)。我不希望您调用这些选择器中的任何一个NSNumber,它应该是实体的属性,而不是实体本身。

CoreData 中的每个实体都必须扩展NSManagedObject,因此您的NSCFNumber对象不是实体。

于 2011-01-27T04:42:00.500 回答