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

时间:2010-10-14 18:27:26

标签: core-data nsmanagedobject

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

    MeasurementDescriptor *descriptor = (MeasurementDescriptor *)[NSEntityDescription 
                                            insertNewObjectForEntityForName:@"MeasurementDescriptor"
                                            inManagedObjectContext:context];

或者像这样:

    Experiment *experiment = (Experiment *)[NSEntityDescription 
                                            insertNewObjectForEntityForName:@"Experiment"
                                            inManagedObjectContext:context];

但奇怪的是(来自上面的代码)

NSLog(@" descriptor's class = %@", NSStringFromClass([descriptor class]));

打印出'NSManagedObject',而

NSLog(@" experiment's class = %@", NSStringFromClass([experiment class]));

打印出“实验”。

有谁知道为什么会这样?与我的其他NSManagedObject子类不同,MeasurementDescriptor没有ivars(不包括其Core Data属性)。添加伊娃并没有改变任何东西。同样,MeasurementDescriptor是唯一没有“关系”属性的NSManagedObject子类。也许这说明了这种奇怪...... ???

1 个答案:

答案 0 :(得分:2)

唯一的解释是您的MeasurementDescriptor子类实际上并不为代码所知。最常见的原因是:

  1. 在数据模型编辑器中,未将实体的Class属性设置为正确的类。
  2. 不将子类的源文件添加到目标。
  3. 使用Core Data很容易,因为如果它找不到专用的子类,它就不会抱怨但只返回用实体的属性键名初始化的通用NSManagedObject。