バックグラウンド
かなり優れたmogeneratorを使用して、コア データ アクセサーを自動生成しています。
mogenerator は、次のようにクラスを構成します。
NSManagedObject
_JGTrainingBase
JGTrainingBase
_JGTrainingGroup
JGTrainingGroup
アンダースコアで始まるクラスは、mogenerator によってコア データ アクセサーで生成されたマシンです。
アンダースコアのないクラスは人間が編集できるクラスであるため、そこにカスタム メソッドを配置でき、データ モデルを変更して 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 の方法は、私が書いたどの方法よりも優れていると信じています。
ここで何が起こっているのかを理解するのに役立つ情報をありがとう。