从“NSEntityDescription *”分配给“NSManagedObject Subclass*”的不兼容指针类型
Posted
技术标签:
【中文标题】从“NSEntityDescription *”分配给“NSManagedObject Subclass*”的不兼容指针类型【英文标题】:Incompatible pointer types assigning to 'NSManagedObject Subclass*' from 'NSEntityDescription *' 【发布时间】:2013-12-16 17:15:09 【问题描述】:我正在保存托管对象上下文,并使用以下方法来执行此操作:
trainingDayObject = [NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];
它有效,一切似乎都很好,但我收到了警告:
Incompatible pointer types assigning to 'VitTrainingDay *' from 'NSEntityDescription *'
VitTrainingDay
是核心数据实体 TrainingDay 的 NSManagedObject 子类。
trainingDayObject
是 VitTrainingDay
的一个实例
我已尝试阅读 NSEntityDescription
上的文档,但由于我分配给实体,我对问题所在感到困惑。
我对核心数据和 Objective-C 还很陌生,如果这真的很明显,请原谅我。这几天一直困扰着我。
【问题讨论】:
【参考方案1】:当你这样做时:
[NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];
你得到的是NSEntityDescription
的一个实例。这是一个等效于您在 Xcode 的 Core Data 模型编辑器中配置的实体类型的对象。它代表一个实体type,而不是那个实体的一个实例。
从错误消息看来,trainingDayObject
被声明为 VitTrainingDay *
,它是一个指向托管对象实例的指针。
这里的区别与类和类的实例之间的区别完全相同。这就像您试图将 NSString
类分配给应该是字符串的特定实例的东西。
你真正想要的是类似的东西
trainingDayObject = [NSEntityDescription insertNewObjectForEntityForName:@"trainingDay" inManagedObjectContext:self.context];
因为这个方法创建了一个实体类型的新实例,而不是仅仅给你实体类型对象本身。
【讨论】:
如果我使用insertNewObjectForEntityForName
,除了从其他创建的对象中保存 MOC 之外,我最终还会创建空白对象。例如,在我的表格视图中,我得到 nil,nil,Name 1,Name 2,而不是预期的 Name1,Name 2。
然后再问一个问题,提供更多关于你在做什么的细节。例如,当您使用上述问题中的代码行时,您正在尝试做什么。只有一行,不可能给出一个反映应用程序整体结构上下文的答案。我所做的可能是解释那一行有什么问题。
我认为这是一个更简单的问题,并且不想让问题过于复杂。这是我的另一个问题:***.com/questions/20589938/…以上是关于从“NSEntityDescription *”分配给“NSManagedObject Subclass*”的不兼容指针类型的主要内容,如果未能解决你的问题,请参考以下文章
OCMock - 试图模拟 NSEntityDescription
NSEntityDescription.entity 崩溃应用程序(SIGABRT)