我正在保存托管对象上下文,并使用以下方法进行保存:
trainingDayObject = [NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];
它有效,一切看起来都很好,但我收到警告:
Incompatible pointer types assigning to 'VitTrainingDay *' from 'NSEntityDescription *'
VitTrainingDay
是核心数据实体 TrainingDay 的 NSManagedObject 子类。
trainingDayObject
是 VitTrainingDay
我已经尝试阅读有关 NSEntityDescription
的文档,但由于我正在分配给一个实体,所以我对问题所在感到困惑。
我对核心数据和 Objective-C 还很陌生,如果这真的很明显,请原谅我。这几天一直困扰着我。
最佳答案
当你这样做时:
[NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];
您得到的是 NSEntityDescription
的一个实例。这是一个对象,相当于您在 Xcode 的核心数据模型编辑器中配置的实体类型。它表示一个实体类型,而不是该实体的一个实例。
从错误消息看来,trainingDayObject
被声明为 VitTrainingDay *
,这是一个指向托管对象实例的指针。
这里的区别与类和类的实例的区别完全一样。这就像你试图将 NSString
类分配给应该是字符串的特定实例的东西。
你真正想要的是这样的
trainingDayObject = [NSEntityDescription insertNewObjectForEntityForName:@"trainingDay" inManagedObjectContext:self.context];
因为这个方法创建了一个实体类型的新实例,而不是仅仅给你实体类型对象本身。
关于ios - 从 'NSManagedObject Subclass*' 分配给 'NSEntityDescription *' 的不兼容指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616676/