我正在使用相当优秀的mogenerator来自动生成核心数据访问器。
mogenerator将类构造如下:
NSManagedObject
_JGTrainingBase
JGTrainingBase
_JGTrainingGroup
JGTrainingGroup
以下划线开头的类是由mogenerator使用核心数据访问器生成的机器。
没有下划线的类是人类可编辑的类,因此您可以在其中放置自定义方法,而不是在更改数据模型和重新运行生成器时将其覆盖。
培训组实体有许多称为“孩子”的关系。
我正在使用Core Data访问器来修改我的关系。
我希望在添加子对象之前更新持续时间 - 瞬态属性。
我的代码
@implementation JGTrainingGroup
...
-(void)addChildrenObject:(JGTrainingGroup *)value_ {
[self updateDuration];
[super addChildrenObject:value_];
}
...
@end
但是当我调用此方法时,我收到一条错误消息:
[JGTrainingGroup addChildrenObject:]: unrecognized selector sent to instance 0x10667fa30
生成的代码
@interface _JGTrainingBase : NSManagedObject {}
// Method declarations
@end
@interface _JGTrainingBase (CoreDataGeneratedAccessors)
- (void)addChildrenObject:(JGTrainingBase*)value_;
- (void)removeChildrenObject:(JGTrainingBase*)value_;
// Lots more methods
@end
问题
为什么super不响应addChildrenObject:方法?这些是以类别风格添加的吗?
如何从子类访问Core Data生成的方法?
注意
我意识到我可以使用primitiveValueForKey将类型的对象添加到集合中:类似,但这意味着我正在重写核心数据访问器,从而浪费我的时间并可能使我的代码有问题。我相信Apple的方法会比我能写的任何方法都好。
感谢您提供任何帮助我了解这里发生了什么的意见。
答案 0 :(得分:3)
如果你有两个NSManagedObject的子类,其中父类实现了一个动态属性,它的子类(NSManagedObject的孙子)覆盖了属性的方法,那些覆盖不能调用super。
说ADC
您不能调用super,因为运行时根据需要生成这些访问器