我相对精通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,甚至编辑模型,以便所讨论的关系是一个而不是多个。无论我做什么,都会出现同样的问题。有没有人见过这样的事情呢?
答案 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
对象不是实体。