在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参考日期以来的时间量,允许日期大于或小于另一个日期。 这在这里描述。