【问题标题】:Why do i have to set the Parent Entity when subclassing and abstract entity?为什么在子类化和抽象实体时必须设置父实体?
【发布时间】:2011-10-02 11:47:25
【问题描述】:

我遇到的问题是,除非我将子类实体的父实体属性设置为抽象超类的实体,否则我无法分配给子类的属性。

在 XCode 4.0.2 中,这是我所指的父实体属性:

我不明白的是,我认为父实体旨在用于实体之间的父子关系,而对象关系只是由类定义捕获。

示例

实体 A、B 和 C:

  • A 是 A 类型的抽象实体,具有以下属性:
    • y : 字符串
    • z:字符串
  • B 是 A 类型的实体,没有属性
  • C 是 A 类型的实体,没有属性

A、B 和 C 类:

@interface A : NSManagedObject {
}
@property (nonatomic, retain) NSString * y;
@property (nonatomic, retain) NSString * z;

@interface B : A {
}
@interface C : A {
}

问题

如果我没有将实体 B 和 C 的父实体设置为实体 A,那么当我尝试时:

NSEntityDescription *be = [[mom entitiesByName] objectForKey:@"B"];
B *b = [[NSManagedObject alloc] initWithEntity:be
                insertIntoManagedObjectContext:moc];

b.y = @"test"; // <<-- This line causes the following error:

我明白了:

-[NSManagedObject setY:]: unrecognized selector sent to instance

如果我设置了父实体,它似乎可以工作,只是持久化到商店的实体似乎是 A 而不是 B。

【问题讨论】:

    标签: xcode cocoa inheritance core-data subclass


    【解决方案1】:

    您是否记得将实体 B 的类设置为 B 类?如果是,您应该查看分配给b 的指针的类型...实际上是B* 吗?根据您遇到的错误以及-initWithEntity:insertIntoManagedObjectContext: 的文档,它看起来可能是一个 NSManagedObject*...

    动态生成的子类 将基于指定的类 由实体,因此指定一个自定义 模型中的类将取代 类传递给 alloc。

    ...如果您的模型配置正确,我认为您应该获得 B*。

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2014-10-15
      相关资源
      最近更新 更多