3

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

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

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

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

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

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

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

4

1 回答 1

4

当你这样做时:

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

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

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

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

你真正想要的是

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

因为这个方法创建了一个实体类型的新实例,而不是仅仅给你实体类型对象本身。

于 2013-12-16T17:31:36.340 回答