きりかノート 3冊め

おあそびプログラミング

mogenerator で CoreData のカスタムクラスコード生成

rentzsch.com の "mogenerator: Core Data codegen" で、mogenerator というツールが公開されていた。これは WebObjects にあった EOGenerator というツールの CoreData 版(のようなもの)らしい(WO 知らないのでよくわからん)。コンパイルするには、MiscMerge.framework が必要。

これに CoreData のモデルファイル (.xcdatamodel) を食わせると、{_Foo.h, _Foo.m, Foo.h, Foo.m} といった 4つのファイルを生成する。で、Foo.h や Foo.m に自分の書きたいビジネスロジックを書けばよい。モデルに変更があっても、更新されるのは _Foo.h や _Foo.m だから影響しない。

これが、ジェネレーションギャップパターンによるものなのだけど、Objective-C なら_Foo に相当する中間クラスがなくって、カテゴリでアクセサが定義されてても問題がないと思う。Foo 側がクラス定義文でないとインスタンス変数が書けないので、_Foo 側がカテゴリになるね。

 // Foo.h
@interface Foo : NSManagedObject
// write custom logic
@end

// _Foo.h
@interface Foo (GenerationGap)
// accessors
@end

そんなことよりなにが収穫かっていうと、去年探してた MiscMerge を見つけたってことなのだ。こんなところに!