Iphone “NSInternalInconsistencyException”,原因:“Foo”不是NSManagedObject的子类

Iphone “NSInternalInconsistencyException”,原因:“Foo”不是NSManagedObject的子类,iphone,core-data,Iphone,Core Data,这就是我得到的错误 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '"Place" is not a subclass of NSManagedObject.' 我假设它的意思是“地点”没有作为一个实体添加到核心数据模型中???但正如下图所示 我猜我的假设是不正确的,所以任何帮助或想法都是好的 我很确定这是导致它的原因: NSManagedObject

这就是我得到的错误

   *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '"Place" is not a subclass of NSManagedObject.'
我假设它的意思是“地点”没有作为一个实体添加到核心数据模型中???但正如下图所示

我猜我的假设是不正确的,所以任何帮助或想法都是好的

我很确定这是导致它的原因:

  NSManagedObject* place = [NSEntityDescription
                               insertNewObjectForEntityForName:@"Place" 
                               inManagedObjectContext:context];

如果您没有使用自定义类no Place。[hm],因为听起来您没有,请检查实体选项卡,并确保类名为空=NSManagedObject–not Place。

解决此问题的另一种方法是确实使用建议的NSManagedObject子类

Place *place = [NSEntityDescription
                           insertNewObjectForEntityForName:@"Place" 
                           inManagedObjectContext:context];

我在名为Message和Connection的类中也遇到了同样的问题。该错误是在使用MessageUI库添加电子邮件功能后出现的。我认为发生冲突是因为库中有名为Message和Connection的类,因此它们不被视为NSManagedObject的子类。在我的案例中,通过在名称前加上X来更改它们的名称,可以使实体唯一。我打算在将来为我的所有实体添加前缀,以减少发生冲突的可能性。

遇到此类错误时,首先要做的是验证实体的类名:

开放数据模型 选择您的实体 打开右窗格“实用程序” 单击“显示数据模型检查器”按钮 验证类名,使其与生成的模型同步
希望这有帮助

执行该行时上下文有效吗?非零,连接到持久性商店协调员…冠军!我不记得碰过那个。是什么导致了它的改变?我猜实体的子类实际上是默认的。耶,伙计!这就成功了,谢谢!如果您决定从编辑器菜单创建NSManagedObject子类,则可能会发生这种情况。谢谢!!!我一直在使用MTLManagedObjectAdapter来解决这个错误。我在Xcode中使用了NSManagedObject子类文件生成器,它会自动为我添加实体类,然后我将.h中的类从NSManagedObject更改为MTLModel,并且没有删除此类设置。将Place设置为NSManagedObject的子类需要与此不同的方法。更改变量的类型不会影响对象的类。不,不会。正如已经指出的,这是默认设置,因此建议使用。例如,使用显式属性名要比通过键值编码访问属性安全得多。Doh,很好。有一个名为Message的实体抛出了这个致命的错误。我确实遇到了完全相同的问题,有一个名为“Connection”的类。在名字前面加前缀效果很好,谢谢。