iphone - 在 NSPredicate 中使用 NSDate

标签 iphone ios core-data nsdate nspredicate

是否有特定的方法来配置 NSPredicate 来比较日期?

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

我想配置一个 NSPredicate,它将返回最近查看的所有照片对象超过指定时间段 - 通常是两天。

我像这样获取过去的日期:

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 的每张照片都比我的 twoDaysPast 更新NSDate.

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

最佳答案

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

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

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

NSDate 对象可以使用 NSDate 方法 compare: 直接进行比较。日期基于自 typedef 引用日期以来的时间量,因此允许一个日期大于或小于另一个日期。这是描述here .

关于iphone - 在 NSPredicate 中使用 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317240/

相关文章:

iphone - 如何防止我的 iPhone 4 手电筒应用程序在关闭时闪烁?

ios - 如何在 UITableView 原型(prototype)单元格上设置自定义 UILabel 文本

ios - 在 watchOS 2 扩展中创建的 Realm 浏览器中打开 Realm 文件

ios - 哪些数据类型与 Core Data/SQL 一起使用以最大限度地减少转换

iOS - 如何使用钥匙串(keychain)/核心数据创建登录过程?

ios - 在 Swift 中将数组作为字符串存储到核心数据

iphone - 如何在 UIButton 上创建通知

html - 同时向上/向下 - 左/右滚动不适用于 iphone

ios - 在 UITableView 中选择时无法更改分隔符(自定义 UIView)颜色

ios - iOS本地通知唤醒应用程序