0

私のアプリケーションは、次のようなエンティティを持つ経費リストです。

Expense:
date [NSDate] 
location [NSString] 
name [NSString] 
price [float]

UITableView グループの費用を月ごとのセクションに表示し、後で別のテーブル ビュー (ドリルダウン デザイン) で月の日付ごとに表示したいと思います。NSDate 自体に時間が含まれているため、日付でフィルター処理された結果も時間でフィルター処理されます。

私は試しました:

NSPredicate *chooseDateAt = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        Expense *expense = (Expense *)evaluatedObject;
        return expense.dateWithoutTime == preferedDateWithoutTime;
    }];

しかし、次のエラーがあります。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unknown predicate type for predicate: BLOCKPREDICATE(0x12048)'

そして、predicateWithBlock を使用せずにそれを解決する他の方法がわかりません。誰か助けてもらえますか?

4

1 に答える 1

1

1) 一日の始まりを決定する (同日の 0:00) --> startDate
2) 次のように述語を作成します。

[NSPredicate predicateWithFormat:@"date > %@ && date < %@", 
          startDate, 
          [startDate dateByAddingTimeInterval:60*60*24]]; 

実際、私が で行ったように、秒を使用して 1 日を追加するべきではないことが指摘されていますdateByAddingTimeInterval。これを終了日として使用することをお勧めします。

NSDateComponents* dateComponents = [[NSDateComponents alloc]init];
[dateComponents setDay:1];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* endDate = [calendar dateByAddingComponents:dateComponents 
    toDate:startDate options:0];
于 2012-08-01T08:41:21.563 に答える