我可以将属性添加到 NSManagedObject 的子类的子类吗?
Can I add properties to subclass of subclass of NSManagedObject?
我有一个由核心数据生成的classBase : NSManagedObject
,为了给这个实体添加一些方法,我用Derived : Base
子class它。现在,我想添加一个 属性(不在 Base
class 中)到 Derived
class。但是当我尝试访问添加的 属性 的 setter 时,它抛出异常:
caught "NSInvalidArgumentException", "-[Base setAddedProperty:]: unrecognized selector sent to instance 0x7fdcc31b36d0"
有人能帮忙吗?
EDIT: 似乎 NSManagedObject 的 subclass 的 subclass 不能有自己的方法,因为我刚给 [=14 添加了一个方法=] 并得到类似的异常。这是否意味着类别是向 NSManagedObject 的 subclass 添加方法的唯一方法?
编辑: 我将配置中实体的 "Class" 更改为 Derived
,现在一切正常。可以访问所有这些新添加的属性并可以调用自定义方法。为什么?这是一个好习惯吗?
编辑: 上面的描述似乎被误解了。我打算将核心数据生成的实体 class 子classes 以提供自定义的方法和属性,而不是创建子实体。因此,Derived
不是数据模型中的实体。
您还应该在 xcdatamodel 中指定继承。检查字段:名称、Class、xcdatamodel 中的父实体。 Derived : Base
不足以容纳 NSManagedObject
个子类。
你需要select 母羊(也尝试为你设置抽象实体Base)
我解决了这个问题。
在我的 .xcdatamodeld 文件中,我将 Base
实体映射到 Base
class。在我的代码中,我通过以下方式创建了一个实例:
Derived* pointer = [Derived MR_createEntity];
此方法为我调用 NSEntityDescriptor insertNewObjectForEntityForName:inManagedObjectContext
。但是,尽管指针的类型为 Derived*
,但此方法将 return Base
的实例而不是 Derived
的实例,如果在编译中这应该是语法错误。
因此,为了使我在 Derived
中的方法有效,我需要手动将映射从 Base
更改为 Derived
。
编辑:
写完这个答案后,我发现了一个很棒的工具mogenerator,它使用了与我上面描述的完全相同的想法并且非常方便。
我有一个由核心数据生成的classBase : NSManagedObject
,为了给这个实体添加一些方法,我用Derived : Base
子class它。现在,我想添加一个 属性(不在 Base
class 中)到 Derived
class。但是当我尝试访问添加的 属性 的 setter 时,它抛出异常:
caught "NSInvalidArgumentException", "-[Base setAddedProperty:]: unrecognized selector sent to instance 0x7fdcc31b36d0"
有人能帮忙吗?
EDIT: 似乎 NSManagedObject 的 subclass 的 subclass 不能有自己的方法,因为我刚给 [=14 添加了一个方法=] 并得到类似的异常。这是否意味着类别是向 NSManagedObject 的 subclass 添加方法的唯一方法?
编辑: 我将配置中实体的 "Class" 更改为 Derived
,现在一切正常。可以访问所有这些新添加的属性并可以调用自定义方法。为什么?这是一个好习惯吗?
编辑: 上面的描述似乎被误解了。我打算将核心数据生成的实体 class 子classes 以提供自定义的方法和属性,而不是创建子实体。因此,Derived
不是数据模型中的实体。
您还应该在 xcdatamodel 中指定继承。检查字段:名称、Class、xcdatamodel 中的父实体。 Derived : Base
不足以容纳 NSManagedObject
个子类。
你需要select 母羊(也尝试为你设置抽象实体Base)
我解决了这个问题。
在我的 .xcdatamodeld 文件中,我将 Base
实体映射到 Base
class。在我的代码中,我通过以下方式创建了一个实例:
Derived* pointer = [Derived MR_createEntity];
此方法为我调用 NSEntityDescriptor insertNewObjectForEntityForName:inManagedObjectContext
。但是,尽管指针的类型为 Derived*
,但此方法将 return Base
的实例而不是 Derived
的实例,如果在编译中这应该是语法错误。
因此,为了使我在 Derived
中的方法有效,我需要手动将映射从 Base
更改为 Derived
。
编辑: 写完这个答案后,我发现了一个很棒的工具mogenerator,它使用了与我上面描述的完全相同的想法并且非常方便。