我正在保存托管对象上下文,并使用以下内容来执行此操作:
trainingDayObject = [NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];
它有效,一切看起来都很棒,但我收到了警告:
Incompatible pointer types assigning to 'VitTrainingDay *' from 'NSEntityDescription *'
VitTrainingDay
是Core Data实体TrainingDay的NSManagedObject子类。
trainingDayObject
是VitTrainingDay
我已尝试阅读NSEntityDescription
上的文档,但由于我分配给实体,我对问题是什么感到困惑。
我对核心数据和Objective-C都很陌生,所以请原谅我,如果这很明显的话。这几天困扰我了。
答案 0 :(得分:4)
执行此操作时:
[NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];
你得到的是NSEntityDescription
的一个实例。这是一个对象,它等同于您在Xcode中的Core Data模型编辑器中配置的实体类型。它表示实体类型,而不是该实体的实例。
从错误消息中可以看出trainingDayObject
被声明为VitTrainingDay *
,它是指向托管对象实例的指针。
这里的区别与类和类实例之间的区别完全相同。这就像你试图将NSString
类分配给应该是字符串的特定实例的东西。
你真正想要的是像
trainingDayObject = [NSEntityDescription insertNewObjectForEntityForName:@"trainingDay" inManagedObjectContext:self.context];
因为此方法创建实体类型的新实例,而不是仅仅为您提供实体类型对象。