我有一个Base : NSManagedObject
由核心数据生成的类,为了向该实体添加一些方法,我用对其进行了子类化Derived : Base
。现在,我想向类添加一个属性(不在Base
类中)Derived
。但是,当我尝试访问添加的属性的setter时,它将引发异常:
caught "NSInvalidArgumentException", "-[Base setAddedProperty:]: unrecognized selector sent to instance 0x7fdcc31b36d0"
有人可以帮忙吗?
编辑:看来NSManagedObject的子类的子类不能有自己的方法,因为我刚刚向其中添加了一个方法Derived
并得到了类似的异常。这是否意味着类别是将方法添加到NSManagedObject子类的唯一方法?
编辑:我将配置中的实体的“类”更改Derived
为,现在一切正常。可以访问所有这些新添加的属性,并可以调用自定义方法。为什么?这是一个好习惯吗?
编辑:似乎上述描述被误解了。我打算对核心数据生成的实体类进行子类化,以便提供自定义的方法和属性,而不是创建子实体。因此,Derived
不是数据模型中的实体。
我解决了这个问题。
在我的.xcdatamodeld文件中,我将Base
实体映射到Base
类。在我的代码中,我通过以下方式创建实例:
Derived* pointer = [Derived MR_createEntity];
此方法NSEntityDescriptor insertNewObjectForEntityForName:inManagedObjectContext
为我调用。但是,尽管指针的类型为,但此方法仍将返回的实例,Base
而不是,如果在编译中,则该语法应为语法错误。Derived
Derived*
因此,为了使我的方法Derived
有效,我需要手动将映射从更改Base
为Derived
。
编辑:写完这个答案后,我发现了一个很棒的工具生成器,它使用了与我上面描述的完全相同的想法,非常方便。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句