今日 Qiitaで見つけた投稿がためになったのでメモ。
Core Dataにrailsのmodelみたいに自分で定義したmethodを作成する
http://qiita.com/items/d8d66ace518b25635e4e
Xcodeでは Editor > Create NSManagedObject Subclass...
を選択すると .xcdatamodeld
形式のモデルからコードを自動的に生成してくれる。
同じように New > File...
の Core Data > NSManagedObject subclass
から作成することもできる。
それ以降は .xcdatamodeld ファイルが変更される度に上記の手順でコードをリジェネレートするので、自動生成されたファイルに直接コードを書き足していくのは賢くない。
そんな時は、カテゴリを使ってメソッドを追加するのがいいらしい。
例えばこんな感じ。
Event+dateFormatter.h
#import "Event.h" @interface Event (dateFormatter) - (NSDateFormatter *)dateFormatter; @end
Event+dateFormatter.m
#import "Event+dateFormatter.h" @implementation Event (dateFormatter) - (NSDateFormatter *)dateFormatter { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; return dateFormatter; } @end
なるほど。今まではせっせと書き換えていたけど、カテゴリで追加する方がスマートだ。
まだ Core Data は使い始めたばかりなので、こういった情報はどんどん集めていきたいところ。
それよりも、ARCが有効なのに自動生成されるクラスのプロパティにretainが入ってしまうのはなんとかならないのだろうか。
あと、Orderedな一対多のリレーションを作った時に、自動生成されるメソッドが尽く失敗する現象もなんとかしてほしい。(一応修正する方法はある)