与NSDate比较相关的核心数据谓词

时间:2014-09-03 11:48:07

标签: ios core-data nspredicate

我的核心数据模型有一个名为Item的实体,它有一个名为insertedDate的日期属性。应用程序首选项设置具有选项,允许用户将Item对象保留为自插入数据库以来的特定时间间隔。

insertedDate属性将在托管对象类的awakeFromInsert方法中设置。

现在我有"1 day", "2 days", "1 week", "1 month"等选项......如果用户选择"1 day",那么如果项目的插入日期与当前日期超过24小时相比,则应删除这些项目在应用程序终止之前。

我的问题是:如何根据使用谓词的insertedDatecurrent date之间经过的时间间隔大于用户指定的保持时间间隔选项来获取Item对象?

非常感谢所有的帮助。

1 个答案:

答案 0 :(得分:1)

NSPredicate支持基于NSDate属性查询对象,例如

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"insertedDate <= %@", minInsertionDate];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:context]];
[request setPredicate:predicate];

这就是你如何计算minInsertionDate的值,例如:表示在所选过滤器之前插入的所有项目的时间点。为此,您可以使用NSDate的dateWithTimeIntervalSinceNow:类方法,例如获取代表1天前的日期对象...

NSTimeInterval secondsInADay = 24 * 60 * 60;
NSDate *minInsertionDate = [NSDate dateWithTimeIntervalSinceNow:-secondsInADay];