0

NSDates と数値のCore Data ベースのテーブルがあります。

NSPredicate特定の日付より下の最大日付の数値を取得するためにDEC-30-2012を作成しようとしていDEC-29-2012ますDEC-31-2012

残念ながら、私の述語は機能せず、ランタイム クラッシュが発生します。

NSFetchRequest *request = [NSFetchRequest 
   fetchRequestWithEntityName:NSStringFromClass([self class])];
NSPredicate *predicate = [NSPredicate 
   predicateWithFormat:@"SUBQUERY(SELF,$x,$x.date.@max <= %@)",endDate];

エラー:

フォーマット文字列 "SUBQUERY(SELF,$x,$x.date.@max <= %@)" を解析できません

これを正しくするには、述語をどのように書き直す必要がありますか?

ありがとうございました!

4

2 に答える 2

4

次の戦略が機能するはずです。

  • 指定された日付よりも前の日付を持つすべてのオブジェクトを取得する述語を使用します。

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date < %@", endDate];
    [request setPredicate:predicate];
    
  • 結果を日付の降順でソートするソート記述子を追加して、最後の日付が最初になるようにします。

    NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
    [request setSortDescriptors:@[sortDesc]];
    
  • フェッチ制限を 1 に設定します。

    [request setFetchLimit:1];
    

起動引数「-com.apple.CoreData.SQLDebug 1」を設定することで、フィルタリングが SQLite レベルで行われていることがわかります。

SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATE, t0.ZNAME FROM ZENTITY t0 WHERE  t0.ZDATE < ? ORDER BY t0.ZDATE DESC LIMIT 1
于 2013-03-13T12:39:29.993 に答える
0

このように述語を適用します

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"startDate <= %@ && endDate >= %@", start, end];

どこ

startかつ( enddateRange NSDate Objects)

startDateendDateキーです。

于 2013-03-13T12:43:42.700 に答える