gpt4 book ai didi

xcode - 为什么在子类化和抽象实体时必须设置父实体?

转载 作者:行者123 更新时间:2023-12-03 16:14:48 24 4
gpt4 key购买 nike

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

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

enter image description here

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

示例

实体 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。

最佳答案

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

The dynamically-generated subclass will be based on the class specified by the entity, so specifying a custom class in your model will supersede the class passed to alloc.

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

关于xcode - 为什么在子类化和抽象实体时必须设置父实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com