1

我有几个 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(不包括其核心数据属性)。添加 ivar 并没有改变任何东西。同样,MeasurementDescriptor 是唯一没有“关系”属性的 NSManagedObject 子类。也许这是造成这种奇怪的原因......???

4

1 回答 1

2

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

  1. 在数据模型编辑器中,未将Class实体的属性设置为正确的类。
  2. 不将子类的源文件添加到目标。

这在 Core Data 中很容易做到,因为如果它找不到专用的子类,它不会抱怨,只会返回一个用实体的属性键名初始化的通用 NSManagedObject。

于 2010-10-15T20:56:27.573 回答