在NSPredicate中使用NSDate

有没有一种特殊的方法来配置NSPredicate来比较日期?

基本上我有一个Photo对象有一个NSDate,lastViewed。

我想配置一个NSPredicate,它将返回最近查看的所有Photo对象,而不是指定的时间段 – 通常为两天。

我这样得到过去的日期:

NSTimeInterval secondsPast = -172800; NSDate * twoDaysPast = [NSDate dateWithTimeInterval:secondsPast sinceDate:[NSDate date]];

NSTimeInterval secondsPast = -172800; NSDate * twoDaysPast = [NSDate dateWithTimeInterval:secondsPast sinceDate:[NSDate date]]; 并且如此配置NSPredicate:

request.predicate = [NSPredicate predicateWithFormat:@"lastViewed > %@", twoDaysPast];

但是我没有得到任何结果,我不确定为什么。

我知道我的所有Photo对象都有lastViewed设置 – 只要将Photo添加到Core Data,它就会设置为默认值now,所以默认情况下我应该看到创建为lastViewed的每张Photo都比我的twoDaysPast NSDate更新。

我可以用这种方式直接比较两个NSDate实例吗?

这是在NSPredicates中使用NSDates的正确方法。 如果它不起作用,您是否尝试完全删除谓词并确保其余请求有效? 在运行查询之前,您还可能需要通过NSLog检查谓词。

我成功使用NSDate类方法dateWithTimeIntervalSinceNow:并且您可以在一行中完成所有操作),如下所示:

 request.predicate = [NSPredicate predicateWithFormat:@"recentPhotoLastViewed > %@", [NSDate dateWithTimeIntervalSinceNow:(-172800)]]; 

确保lastViewed中的lastViewed对象实际上是NSDate对象而不是字符串。

可以使用NSDate方法compare:来直接比较NSDate对象compare: 。 日期基于自typedef参考日期以来的时间量,允许日期大于或小于另一个日期。 这在这里描述。