NSDate在自定义对象中使用[NSDate date]过滤NSPredicate

时间:2012-12-19 22:59:38

标签: objective-c nspredicate

我有一个NSMutableArray的Model对象。

每个Model对象的startTime属性为NSDate type

我想使用NSPredicate过滤NSMutableArray。 我想要一个包含现在较旧的项目的数组,以及一个现在更新的项目。

这是我正在使用的代码,但过滤后的数组是空的。我确保主要数组中的项目可以从中过滤。

    NSPredicate *pastPredicate = [NSPredicate predicateWithFormat:@"(startTime < %@)", [NSDate date]];
    NSPredicate *futurePredicate = [NSPredicate predicateWithFormat:@"(startTime >= %@)", [NSDate date]];

    self.pastReservations = [self.reservations filteredArrayUsingPredicate:pastPredicate];
    self.futureReservations = [self.reservations filteredArrayUsingPredicate:futurePredicate];

如果你知道我做错了什么,你能告诉我吗?我不认为我应该使用内置类型的谓词块。

2 个答案:

答案 0 :(得分:0)

为什么不这样:

NSDate* now = [NSDate date];

for(YourModelObject* obj in self.reservations) {

    NSDate* objectDate = obj.date; 

    //if negative, "now" is earlier, so >= 0 is past 
    if([now timeIntervalSinceDate:objectDate] >= 0) {
        [self.pastReservations addObject:obj];
    } else {
        [self.futureReservations addObject:obj];
    }

}

答案 1 :(得分:0)

我的代码是正确的。之前的代码没有正常工作,而且自我保留是空的,就像Ramy Al Zuhouri说的那样。