前回は, セットアップの方法と, 利用するための初期化のコードまで書きました
今回は実際の操作(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 件のコメント:
コメントを投稿