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”!将我的方法重命名为其他修复它!非常感谢:D!【参考方案2】:

我在 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 错误?的主要内容,如果未能解决你的问题,请参考以下文章