2011-12-29 10 views
3

は、私はしかし、これをすることができます日付でそれらを並べ替えた後、最初のCoreData述語最新格納されている日付

を選ぶ

NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

[fetchRequest setFetchLimit:1]; 

方法を見つけましたより最適化されていない?このアプローチは、

ソートはnlognで力任せのように見えますが、最大のための簡単な検索では、私はそれはかなりの最良の方法だと思うのn

答えて

9

あなたが実際に、ちょうどその値のためにその値を持つていないオブジェクトをSQLを求めることができますドキュメンテーション。

0

です。私はもっ​​と効率的な方法があるかどうか分からない。それは、古いものがどれであるかを把握するために、毎日の日付を比較しなければならないからだ。 2つの方法があります。

1)BOOLを管理対象オブジェクトの属性として扱うことができます。 (oldest = 1のように) ただし、削除するたびに新しい「最も古い」管理対象オブジェクトを見つける必要があります。

2)変更するまで古いものを保存することができます。これは、最も古いmanagedObjectを頻繁に見つけなければならない場合に、多くの作業を節約する可能性があります。

アプリケーションによっては(管理対象オブジェクトの挿入/削除回数、最も古いオブジェクトが何回必要か)によって異なります。 - >CoreDataに固有の値をフェッチ

NSExpression *date = [NSExpression expressionForKeyPath:@"date"]; 
NSExpression *maxDate = [NSExpression expressionForFunction:@"max:" 
    arguments:[NSArray arrayWithObject:maxDate]]; 
NSExpressionDescription *d = [[[NSExpressionDescription alloc] init] autorelease]; 
[d setName:@"maxDate"]; 
[d setExpression:maxSalaryExpression]; 
[d setExpressionResultType:NSDateAttributeType]; 

[request setPropertiesToFetch:[NSArray arrayWithObject:d]]; 

NSError *error = nil; 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // Handle the error. 
} else { 
    if (0 < [objects count]) { 
     NSLog(@"Maximum date: %@", [[objects objectAtIndex:0] valueForKey:@"maxDate"]); 
    } 
} 

これはは、管理オブジェクトをフェッチの下でより詳細に記載されている:

1

オンライン2のmaxDate式は、それ自体(maxDate)を参照しています。 これは最初の行の "日付"変数である必要があります。

関連する問題