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

标签 cocoa inheritance core-data subclass

我有一个核心数据模型,其中有一个实体 A,它是一个抽象。实体 B、C 和 D 继承自实体 A。实体 A 中定义了多个属性,供 B、C 和 D 使用。

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

例如:

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

我已经尝试过这个,但是在调用该方法时,我收到:

[NSManagedObject methodName:]: unrecognized selector sent to instance

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

有什么方法可以使用子类 NSManagedObjects 来利用继承吗?

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

感谢任何帮助,提前致谢。

最佳答案

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

@interface A:NSManagedObject{
}
-(void)someMethod:(NSString*)a;
@end;
@interface B:A{
}
-(void)someMethod:(NSString*)a;
@end;

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

screenshot of XCode modeler

这样,当从数据库获取NSManagedObject时,CoreData会自动将正确的类分配给它。

关于cocoa - 将自定义方法添加到子类 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150354/

相关文章:

c++ - 访问父类(super class)实例的 protected 成员

c++ - 通用基类合法吗?

iphone - 保存时出现核心数据 Unresolved 错误

ios - 什么是我的应用程序的更好选择 - CoreData 或 plist?

ios - 具有 bool 属性的 CoreData 实体被保存为 NSNumber 对象

objective-c - 如何将键盘快捷键绑定(bind)到 cocoa 中的 nsbutton

swift - 如何修复 swift 3 嵌套的一般错误

cocoa - 清理 NSDocument 子类

ios - 我应该指定任何路径来访问 Xcode 中的头文件吗?

cocoa - NSTextfield 完成