代码之家  ›  专栏  ›  技术社区  ›  westsider

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

  •  1
  • westsider  · 技术社区  · 14 年前

    我有几个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]));
    

    打印“实验”。

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   TechZen    14 年前

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

    1. 在数据模型编辑器中,不设置 Class
    2. 不将子类的源文件添加到目标。

    这对于核心数据来说很容易做到,因为如果它找不到专用的子类,它不会抱怨,而只是返回一个用实体的属性键名初始化的通用NSManagedObject。