将自定义方法添加到子类NSManagedObject

CJ.*_*CJ. 14 inheritance cocoa core-data subclass

我有一个核心数据模型,我有一个实体A,这是一个抽象.实体B,C和D继承自实体A.实体A中定义了几个由B,C和D使用的属性.

我想在我的模型代码中利用这种继承.除了属性之外,我想知道我是否可以向实体A添加方法,这些方法在它的子实体中实现.

例如:

  1. 我为实体A的接口添加了一个方法,它返回一个值并接受一个参数
  2. 我将此方法的实现添加到A,B,C,D
  3. 然后,我调用executeFetchRequest:检索B的所有实例
  4. 我在检索到的对象上调用该方法,该方法应该调用B实现中包含的方法的实现

我试过这个,但在调用方法时,我收到:

[NSManagedObject methodName:]:发送到实例的无法识别的选择器

我认为这是因为返回的executeFetchRequest:对象是某种代理对象.

有没有办法利用子类NSManagedObjects来利用继承?

我真的希望能够做到这一点,否则我的模型代码将负责确定它正在处理什么类型的NSManagedObject并根据类型执行特殊逻辑,这是不可取的.

任何帮助表示赞赏,提前谢谢.

Yuj*_*uji 25

它应该工作.返回的对象executeFetchRequest:NSManagedObjects(或其子类)的实例.在CoreData中使用自定义类的步骤如下.假设您有实体A和B,其中B继承自A.然后您需要两个自定义类

@interface A:NSManagedObject{
}
-(void)someMethod:(NSString*)a;
@end;
@interface B:A{
}
-(void)someMethod:(NSString*)a;
@end;
Run Code Online (Sandbox Code Playgroud)

然后在XCode数据建模器中设置它们,如下所示:

XCode建模师的截图

这样,CoreData会自动将正确的类分配给NSManagedObject从数据库中获取的类.

  • 我没有在这个答案中看到截图 - 有人可以替换它(Yuji)吗? (9认同)
  • 非常感谢!我的数据模型使用的是NSManagedObject; 我甚至没有意识到我需要指定类名,完美运行! (2认同)

Ale*_*lex 18

如果您收到该异常,则表示Core Data未使用您的自定义类.这里的关键是NSManagedObject- 这是为数据存储中的对象创建的对象Core Data.

如果您还没有,则需要创建一个继承自的类,在那里NSManagedObject添加自定义方法,然后将实体设置A为在对象模型工具中使用自定义类.如果实体B,C,D等有具体的行为,你应该继承您为实体创建的类A,并指定这些实体使用子类了.

从本质上讲,您有一个并行层次结构:一个实体层次结构,另一个类别.对于对象模型中的每个实体,您最终可能会得到实体X和类X.