我遇到的问题是我无法分配子类的属性,除非我将子类实体的Parent Entity属性设置为抽象超类的实体。
在XCode 4.0.2中,这是我所指的Parent Entity属性:
我不知道的是我认为父实体是用于实体之间的父子关系,而对象关系只是由类定义捕获。
实体A,B和C:
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.
答案 0 :(得分:3)
您还记得将实体B的类设置为B类吗?如果是,你应该看一下分配给b
的指针的类型......它实际上是B *吗?看起来它可能是一个NSManagedObject *,基于你得到的错误,并根据-initWithEntity:insertIntoManagedObjectContext:
的文档......
动态生成的子类 将基于指定的类 由实体,所以指定一个自定义 你的模型中的类将取代 class传递给alloc。
......如果您的模型配置正确,我认为您应该获得B *。