首页 文章

从'NSEntityDescription *'分配给'NSManagedObject Subclass*'的不兼容指针类型

提问于
浏览
3

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

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

它工作,一切看起来都很棒,但我收到了警告:

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

VitTrainingDay 是Core Data实体TrainingDay的NSManagedObject子类 . trainingDayObjectVitTrainingDay 的一个实例

我试过阅读 NSEntityDescription 上的文档,但是因为我对问题是什么感到困惑 .

我对核心数据和Objective-C很陌生,所以如果这真的很明显,请原谅我 . 现在几天困扰着我 .

1 回答

  • 4

    当你这样做:

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

    你得到的是一个 NSEntityDescription 的实例 . 这是一个对象,它等同于您在Xcode中的Core Data模型编辑器中配置的实体类型 . 它表示实体类型,而不是该实体的实例 .

    从错误消息中可以看出 trainingDayObject 被声明为 VitTrainingDay * ,它是指向托管对象实例的指针 .

    这里的区别与类和类的实例之间的区别完全相同 . 它's like you'试图将 NSString 类分配给应该是字符串的特定实例的东西 .

    你真正想要的是什么

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

    因为此方法创建实体类型的新实例,而不是仅为您提供实体类型对象本身 .

相关问题