【问题标题】:NSPredicate filter by NSDate in custom object with [NSDate date]NSPredicate 在具有 [NSDate 日期] 的自定义对象中按 NSDate 过滤
【发布时间】:2012-12-19 22:59:38
【问题描述】:

我有一个 NSMutableArray 的模型对象。

每个模型对象都有一个 NSDate 类型的 startTime 属性

我想使用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];

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

【问题讨论】:

  • 代码对我来说似乎很好,在过滤数组之前添加一个断点并打印self.reservations中包含的对象,我怀疑数组是空的。
  • 是的,由于解析错误,我所有的日期都为零。
  • @adrian.coroian:如果您的问题解决了,您可以发布自己的答案并将其标记为已接受,以便其他人看到问题已解决。

标签: objective-c nspredicate


【解决方案1】:

为什么不这样:

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

}

【讨论】:

  • 看看我的方式有多好:)
【解决方案2】:

我的代码是正确的。之前的代码无法正常工作,并且 self.reservations 就像 Ramy Al Zuhouri 所说的那样是空的。

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多