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]]; 

实际上,有人指出不应该像我在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 回答