Core data NSManagedObject子类之间看似不一致的行为

Core data NSManagedObject子类之间看似不一致的行为,core-data,nsmanagedobject,Core Data,Nsmanagedobject,我有几个NSManagedObject的子类。它们都是用如下代码实例化的: MeasurementDescriptor *descriptor = (MeasurementDescriptor *)[NSEntityDescription insertNewObjectForEntityForName:@"MeasurementDescriptor"

我有几个NSManagedObject的子类。它们都是用如下代码实例化的:

    MeasurementDescriptor *descriptor = (MeasurementDescriptor *)[NSEntityDescription 
                                            insertNewObjectForEntityForName:@"MeasurementDescriptor"
                                            inManagedObjectContext:context];
    Experiment *experiment = (Experiment *)[NSEntityDescription 
                                            insertNewObjectForEntityForName:@"Experiment"
                                            inManagedObjectContext:context];
或者像这样:

    MeasurementDescriptor *descriptor = (MeasurementDescriptor *)[NSEntityDescription 
                                            insertNewObjectForEntityForName:@"MeasurementDescriptor"
                                            inManagedObjectContext:context];
    Experiment *experiment = (Experiment *)[NSEntityDescription 
                                            insertNewObjectForEntityForName:@"Experiment"
                                            inManagedObjectContext:context];
但奇怪的是,(从上面的代码)

打印“NSManagedObject”,而

NSLog(@" experiment's class = %@", NSStringFromClass([experiment class]));
打印出“实验”


有人知道为什么会这样吗?MeasurementDescriptor与我的其他NSManagedObject子类不同,它没有IVAR(不包括其核心数据属性)。添加ivar并没有改变任何事情。类似地,MeasurementDescriptor是唯一没有“关系”属性的NSManagedObject子类。也许这就是这种奇怪的原因…?

唯一的解释是,代码实际上并不知道您的
度量描述器
子类。最常见的原因是:

  • 在数据模型编辑器中,未将实体的
    Class
    属性设置为正确的类
  • 不将子类的源文件添加到目标
    这对于核心数据很容易做到,因为如果它找不到专用的子类,它不会抱怨,只会返回一个用实体的属性键名初始化的通用NSManagedObject

    我同意你的解释,但就我的例子来说,你列举的两个例子都不正确。MeasurementDescriptor的实体类是MeasurementDescriptor,源文件包含在项目中。事实上,这就是NSLog行提醒我这个问题的地方。可能是在从模型A(其中没有MeasurementDescriptor)迁移到模型B(其中引入了MeasurementDescriptor)期间,仅存在于一个模型中的实体被视为NSManagedObject。虽然我不知道为什么会这样。