5

背景

我正在使用相当出色的mogenerator来自动生成我的核心数据访问器。

mogenerator 将类构造如下:

NSManagedObject
    _JGTrainingBase
        JGTrainingBase
            _JGTrainingGroup 
                JGTrainingGroup
  • 以下划线开头的类是由 mogenerator 使用核心数据访问器机器生成的。

  • 没有下划线的类是人工可编辑的,因此您可以将自定义方法放在那里,并且在您更改数据模型并重新运行 mogenerator 时不会将其覆盖。

  • 训练组实体具有称为“孩子”的一对多关系。

  • 我正在使用核心数据访问器来修改我的关系。

我想要的是

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

问题

我的代码

@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

问题

  1. 为什么 super 没有响应 addChildrenObject: 方法?是否与这些以类别样式添加有关?

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

笔记

我意识到我可以使用primitiveValueForKey: 和类似方法将子对象添加到集合中,但这意味着我正在重写核心数据访问器,从而浪费我的时间并且可能使我的代码出现错误。我相信苹果的方法会比我能写的任何东西都要好。

感谢您对帮助我了解这里发生的事情的任何意见。

4

1 回答 1

3

如果您有 NSManagedObject 的两个子类,其中父类实现了动态属性,并且其子类(NSManagedObject 的孙子)覆盖了该属性的方法,则这些覆盖不能调用 super。

ADC

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

于 2010-11-08T19:54:04.243 回答