Фон
Я использую довольно превосходный mogenerator для автоматической генерации моих основных средств доступа к данным.
mogenerator структурирует классы следующим образом:
NSManagedObject
_JGTrainingBase
JGTrainingBase
_JGTrainingGroup
JGTrainingGroup
Классы, начинающиеся с подчеркивания, генерируются машиной с основными средствами доступа к данным с помощью mogenerator.
Классы без подчеркивания являются редактируемыми людьми, поэтому вы можете добавлять туда собственные методы и не перезаписывать их при изменении модели данных и повторном запуске mogenerator.
Сущность учебной группы имеет отношение ко многим, называемое "дети".
Я использую средства доступа к данным Core для изменения моих отношений.
Что я хочу
Я хочу обновить длительность - переходный атрибут - перед добавлением дочернего объекта.
Проблема
Мой код
@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:? Это как-то связано с тем, что они добавляются в стиле категории?
Как получить доступ к сгенерированному методу Базовых данных из подкласса?
Примечание
Я понимаю, что могу добавить дочерний объект к набору, используя primitiveValueForKey: и тому подобное, но это означает, что я переписываю основные средства доступа к данным, тратя таким образом свое время и, возможно, делая мой код глючным. Я верю, что методы Apple были бы лучше, чем все, что я мог написать.
Спасибо за любой вклад, помогающий мне понять, что здесь происходит.