2011-07-11 45 views
4

我遇到的问题是,我不能分配给子类的属性,除非我已将子实体的父实体属性设置为抽象超类的实体。为什么在子类化和抽象实体时必须设置父实体?

在Xcode 4.0.2,这是父实体财产即我指:

enter image description here

我不明白的是,我还以为父实体是为父母与实体和对象关系之间的子关系只能由类定义捕获。

实体A,B和C:

  • A是A型的具有属性的抽象实体:
    • Y:串
    • Z:串
  • B是类型A的无属性
  • ℃的实体类型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 

如果我设置父实体,似乎除了实体持续到店里工作,似乎是一个,而不是B.

回答

3

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

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

......我想你应该得到一个B *,如果你的模型配置正确。

相关问题