insertNewObjectForEntityForName:inManagedObjectContext: 返回 NSNumber 错误?
Posted
技术标签:
【中文标题】insertNewObjectForEntityForName:inManagedObjectContext: 返回 NSNumber 错误?【英文标题】:insertNewObjectForEntityForName:inManagedObjectContext: returning NSNumber bug? 【发布时间】:2010-04-29 18:44:15 【问题描述】:我比较精通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,甚至编辑模型以使所讨论的关系是一对一而不是一对多。无论我做什么,都会出现同样的问题。有没有人见过这样的东西?
【问题讨论】:
你有没有想过这个问题? 【参考方案1】:我遇到了同样的问题:我向我的数据库实体的父实体添加了一个名为“isDatabase”的方法(返回一个 BOOL),该实体有一个名为“数据库”的关系。将“isDatabase”重命名为“isOfTypeDatabase”解决了这个问题。所以还要继续寻找父实体!
【讨论】:
您刚刚为我节省了可能小时的挫败感和谷歌搜索。如果我能对这个答案投票一千次,我会的。谢谢你,先生! 天啊!有同样的问题,即使在一个类别中也不能使用“is我在 NSManagedObject
子类上定义了一个属性,该属性与在该类上定义的关系的名称发生冲突。
这是我MyManagedObjectSubclass+Custom.h
中的代码
@property (readonly, nonatomic) BOOL isSeason;
这是 XCode 为 MyManagedObjectSubclass.h 生成的代码
@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;
请注意,isSeason
,由 KVC,将与季节名称发生冲突
【讨论】:
【参考方案3】:我遇到了完全相同的问题,在拔掉头发一整天后,我解决了我的问题。
我认为问题与损坏的属性/关系有关,而 NSCFNumber 实际上是在寻找该属性/关系的 objectID。就我而言,我可以使用 valueForKey: 来查找所有属性/关系,尽管我称为“文件”的关系似乎已损坏。
我终于意识到我已经扩展了 NSObject 以包含一个布尔“isFile”方法,并且不知何故这会干扰 CoreData 并导致它返回一个损坏的对象,或者无法正确处理它拥有的对象。我的猜测是 CoreData 必须动态创建“isXXX”方法。
我可以通过删除 isFile 方法或重命名我的属性来解决问题。
【讨论】:
【参考方案4】:objectID 和实体选择器位于NSManagedObject
,而不是NSCFNumber
(或NSNumber
)。我不希望您在 NSNumber
上调用这些选择器中的任何一个,它应该是实体的属性,而不是实体本身。
CoreData 中的每个实体都必须扩展 NSManagedObject
,因此您的 NSCFNumber
对象不是实体。
【讨论】:
以上是关于insertNewObjectForEntityForName:inManagedObjectContext: 返回 NSNumber 错误?的主要内容,如果未能解决你的问题,请参考以下文章