【问题标题】:Incompatible pointer types assigning to 'NSManagedObject Subclass*' from 'NSEntityDescription *'从“NSEntityDescription *”分配给“NSManagedObject Subclass*”的不兼容指针类型
【发布时间】:2013-12-16 17:15:09
【问题描述】:

我正在保存托管对象上下文,并使用以下方法来执行此操作:

trainingDayObject = [NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];

它有效,一切似乎都很好,但我收到了警告:

Incompatible pointer types assigning to 'VitTrainingDay *' from 'NSEntityDescription *'

VitTrainingDay 是核心数据实体 TrainingDay 的 NSManagedObject 子类。 trainingDayObjectVitTrainingDay 的一个实例

我已尝试阅读 NSEntityDescription 上的文档,但由于我分配给实体,我对问题所在感到困惑。

我对核心数据和 Objective-C 还很陌生,如果这真的很明显,请原谅我。这几天一直困扰着我。

【问题讨论】:

    标签: ios objective-c core-data nsentitydescription


    【解决方案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。
    • 然后再问一个问题,提供更多关于你在做什么的细节。例如,当您使用上述问题中的代码行时,您正在尝试做什么。只有一行,不可能给出一个反映应用程序整体结构上下文的答案。我所做的可能是解释那一行有什么问题。
    • 我认为这是一个更简单的问题,并且不想让问题过于复杂。这是我的另一个问题:stackoverflow.com/questions/20589938/…
    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 2018-11-17
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多