insertNewObjectForEntityForName:inManagedObjectContext:返回NSNumber错误?

时间:2010-04-29 18:44:15

标签: iphone objective-c nsmanagedobject nsmanagedobjectcontext

我相对精通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 个答案:

答案 0 :(得分:14)

我遇到了同样的问题:我添加了一个名为“isDatabase”的方法(返回BOOL)到我的数据库实体的父实体,该实体的关系名为“database”。将“isDatabase”重命名为“isOfTypeDatabase”修复了该问题。所以请继续关注父实体!

答案 1 :(得分:2)

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

以下是我MyManagedObjectSubclass+Custom.h

中的代码

@property (readonly, nonatomic) BOOL isSeason;

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

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

请注意,KVC的isSeason将与季节名称冲突

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

objectID和实体选择器位于NSManagedObject,而非NSCFNumber(或NSNumber)。我不希望你在NSNumber上调用这些选择器中的任何一个,它应该是实体的属性,而不是实体本身。

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