通过谓词在今天之前获取值

时间:2014-06-11 08:02:17

标签: ios objective-c core-data

我有一个每日一词的应用程序。我用NSSTRING存储单词的日期,一切正常。但是,当我想显示数据库中的所有单词时,哪个日期小于[NSDate date] - 这意味着今天,它并没有很好地排序。我使用NSpredicate来做到这一点。如何使它工作?

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"date <= %@", [NSDate date]];
    [fetchRequest setPredicate:predicate];

即使我把字符串从当前日期开始,它也不起作用。我的意思是比较仅适用于当月,因为格式为:11.06.2014

1 个答案:

答案 0 :(得分:2)

最佳解决方案是将日期存储为NSDate或数据库中的时间戳,并将其转换为NSString仅用于显示。

如果无法更改数据库方案,可以使用+ predicateWithBlock方法创建谓词:

NSPredicate *predicate = [NSPredicate predicateWithBlock: ^BOOL(YourManagetObj* obj, NSDictionary *bind){
    NSDate* objDate = ... //convert string to date with the same date formatter you used to convert date to string
    return [objDate earlierDate:[NSDate date]] == objDate;
}];

另请注意,使用您的方案时,您必须使用自定义谓词将存储的字符串转换为NSDate,以便按日期对对象进行排序。