为什么我不能在超级上调用核心数据访问器?

Joh*_*her 5 overloading core-data objective-c super

背景

我正在使用相当优秀的发电机来自动生成我的核心数据访问器.

mogenerator构造如下类:

NSManagedObject
    _JGTrainingBase
        JGTrainingBase
            _JGTrainingGroup 
                JGTrainingGroup
Run Code Online (Sandbox Code Playgroud)
  • 以下划线开头的类是由mogenerator通过核心数据访问器生成的机器.

  • 没有下划线的类是人类可编辑的类,因此您可以在其中放置自定义方法,而不是在更改数据模型和重新运行生成器时将其覆盖.

  • 培训组实体有许多称为"孩子"的关系.

  • 我正在使用Core Data访问器来修改我的关系.

我想要的是

我想在添加子对象之前更新持续时间 - 瞬态属性.

问题

我的守则

@implementation JGTrainingGroup
...
-(void)addChildrenObject:(JGTrainingGroup *)value_ {
    [self updateDuration];
    [super addChildrenObject:value_];
}
...
@end
Run Code Online (Sandbox Code Playgroud)

但是,当我调用此方法时,我收到一条错误消息:

[JGTrainingGroup addChildrenObject:]: unrecognized selector sent to instance 0x10667fa30
Run Code Online (Sandbox Code Playgroud)

生成的代码

@interface _JGTrainingBase : NSManagedObject {}
// Method declarations
@end

@interface _JGTrainingBase (CoreDataGeneratedAccessors)
- (void)addChildrenObject:(JGTrainingBase*)value_;
- (void)removeChildrenObject:(JGTrainingBase*)value_;
// Lots more methods
@end
Run Code Online (Sandbox Code Playgroud)

问题

  1. 为什么super不响应addChildrenObject:方法?这些是以类别风格添加的吗?

  2. 如何从子类访问Core Data生成的方法?

注意

我意识到我可以使用primitiveValueForKey来添加子对象到类:但是这意味着我正在重写核心数据访问器,从而浪费我的时间并且可能使我的代码有问题.我相信Apple的方法会比我能编写的任何方法都好.

感谢您提供任何帮助我了解这里发生了什么的意见.

Mar*_*ger 3

如果您有 NSManagedObject 的两个子类,其中父类实现动态属性,而其子类(NSManagedObject 的孙子)重写该属性的方法,则这些重写无法调用 super。

ADC

您不能调用 super,因为这些访问器是运行时按需生成的