前回は, セットアップの方法と, 利用するための初期化のコードまで書きました
今回は実際の操作(DAO)をつくります
こちらが前回の分
Magical Record 最初のステップ
データ構造
今回使用するデータはこんな感じですCountry
- code Integer32
- key String
uniqueなキーの用なものが必要であれば, もう少し工夫が必要です
さて次はこれらのCRUD処理を書いていきます
Create 作成
-(Country *)createCountry:(int)code key:(NSString *)key { Country *country = [Country MR_createEntity]; country.code = [NSNumber numberWithInt:code]; country.key = key; return country; }利用方法
CountryDAO *cdao = [[CountryDAO alloc] init]; [cdao createCountry:1 key:@"goodtimebiz.us"]; [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];最後にcommitにあたるコードをいれます
Read データをとってくる
Find All と, 属性での検索の例をのせます-(NSArray *)findAll { return [Country MR_findAll]; }
-(Country *)findByCode:(int)code { return [Country MR_findFirstByAttribute:@"code" withValue:[NSNumber numberWithInt:code]]; }codeで検索します
Delete
データが多い場合は, 一気に消すために truncateを使いましょう1件ずつ消す場合は, MR_deleteAllMatchingPredicateを使います
-(void)deleteAll { [Country MR_truncateAll]; }
Update
Updateは特に解説するまでもないですfindなどでデータをとってきて, データを直接更新最後に
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];を忘れずに
NSPredicate
少し, 条件を複雑にしたい場合, SQLのWHERE部分に相当する部分は, CoreData同様, Magical RecordでもNSPredicateを利用します少し例をかえます. Itemという新たなデータを作りました Item
- from Date
- name String
- to Date
- uid String
Deleteの例
-(void)deleteByUid:(NSString *)uid { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid == %@", uid]; [Item MR_deleteAllMatchingPredicate:predicate]; }
NSPredicateを使って, uidという値で検索して, deleteします.検索にかかったものをdeleteします
さらに複雑な例ですfromという時間を利用します
-(NSArray *)findBetweenFromTo:(NSDate *)from to:(NSDate *)to { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(from >= %@) AND (to <= %@)", from, to]; return [Item MR_findAllSortedBy:@"from" ascending:YES withPredicate:predicate]; }
ユニークなキー
CoreDataは自動的にprimary key的なものが追加されますが, 開発者側ではアクセスできません自分自身で primary key 的なものを管理したい場合新たに, ユニークなキーを要素として追加する必要があります
個人的にはこんな感じに作っています
Item *item = [Item MR_createEntity]; NSString *uid = [[[item objectID] URIRepresentation] lastPathComponent];
0 件のコメント:
コメントを投稿