CoreDataについて、幾つか小技があるのでメモ。

該当件数を取得する

SQLに於けるcount文です。

[objc]
NSManagedObjectContext *context = …;
NSFetchRequest *request = …;
NSError *error = nil;
NSUInteger count = [context countForFetchRequest:request error:&error];
[/objc]

最大値取得

本来はNSExpressionDescriptionを使うべきなのでしょうが、ソースが長くなるので
order … limit 1 で代用できます。

idの最大値を取る場合
[objc]
NSManagedObjectContext *context = …;
NSFetchRequest *request = …;

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:NO];
NSArray *sortArray = [NSArray arrayWithObject:descriptor];
[request setSortDescriptors:sortArray];

[request setFetchLimit:1];

NSError *error = nil;
NSArray *results = [_context executeFetchRequest:request error:&error];
NSNumber *max = [[results lastObject] id];
[/objc]

NSManagedObjectにNSDictinaryからデータを代入する

[objc]
Book * book = … ; // BookはNSManagedObjectのサブクラス
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
@"life",@"title",
@"wicket",@"auther",
nil];
[book setValuesForKeysWithDictionary:dic];
[/objc]

逆にNSManagedObjectからNSDictionaryとしてデータを取り出す

[objc]
NSDictionary *dic = [book dictionaryWithValuesForKeys:[[[book entity] attributesByName] allKeys]];
[/objc]

最初からNSDictionaryでデータを取得する

[objc]
NSManagedObjectContext *context = …;
NSFetchRequest *request = …;

[request setResultType:NSDictionaryResultType];

NSError *error = nil;
NSArray *fetchResults = [_context executeFetchRequest:[self build] error:&error];
[/objc]

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>