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

时间:2013-12-16 17:15:10

标签: ios objective-c core-data nsentitydescription

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

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 个答案:

答案 0 :(得分:4)

执行此操作时:

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

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

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

这里的区别与类和类实例之间的区别完全相同。这就像你试图将NSString类分配给应该是字符串的特定实例的东西。

你真正想要的是像

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

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