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