Cocoaの日々: Core Data - 最大値を取得する
では、その最大値を持つ NSManagedObject を取得するにはどうしたら良いのか?
コード例
こんな感じ。
- (NSManagedObject*)lastTimeStampObject
{
NSManagedObjectContext* moc = self.managedObjectContext;
NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Event"
inManagedObjectContext:moc];
[request setEntity:entity];
NSSortDescriptor* sort = [NSSortDescriptor sortDescriptorWithKey:@"timeStamp"
ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sort]];
[request setFetchLimit:1];
NSError* error = nil;
NSArray* results = [moc executeFetchRequest:request error:&error];
if ([results count] > 0) {
return [results objectAtIndex:0];
} else {
return nil;
}
}timeStamp の降順で検索をかけ、1番目の要素を返している。
出力されているSQLは次の通り。
CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZTIMESTAMP FROM ZEVENT t0 ORDER BY t0.ZTIMESTAMP DESC LIMIT 1
-[NSFetchRequest setFetchLimit:1] を指定により SQLでも 'LIMIT 1'が付与されている。この為結果は1もしくは0(まったくレコードが無い)のどちらかになる。
サンプル
Xcodeで生成される CoreDataサンプルコードに手を加えてみた。
左下のボタンを押すと最大値を持つ NSManagedObject の descriptionがデバッグコンソールへ出力される。
ソースコード
GitHub からどうぞ
LargestManagedObject at 2010-08-02 from xcatsan's iOS-Sample-Code - GitHub




Responses
Leave a Response