IOS / Objective-C:使用NSPredicate过滤事件数组,以查找接近现在的日期

时间:2017-11-07 21:14:28

标签: ios nsdate nspredicate

我从Core Data获取一系列事件。反过来,我想过滤结果以获取当前发生的任何事件,即在最后一小时内开始的事件。

我对如何过滤数组有点模糊,甚至更模糊如何在NSpredicate中使用日期。我想我需要计算一个比现在还要早一个小时的时间,一个距离真实时间很短的时间,然后将这些时间与起始时间进行比较,但我不知道该怎么做。

这是我到目前为止所做的:

//fetch from coredata
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest
                                                                       error:&error];
    NSMutableArray *mutableresults = [results mutableCopy];
    NSDate* now = [NSDate date];
    NSTimeInterval backSecondsInHour = -60 * 60;
    NSTimeInterval forwardSecondsInHour = 60 * 60;

    NSDate* hourAgo =  [NSDate dateWithTimeInterval:backSecondsInHour sinceDate:now];
    NSDate* hourFromNow =  [NSDate dateWithTimeInterval:forwardSecondsInHour sinceDate:now];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"starttime >= %@&&starttime<=%@",hourAgo,hourFromNow];
    NSArray *filteredEvents=[mutableresults filteredArrayUsingPredicate:predicate];

我在这里走在正确的轨道上吗?非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

相反,每次从数据库中检索所有事件只需获取所需的事件......

以下是自上一小时以来所有事件的谓词应用于fetchRequest的示例:

NSDate *hourAgo = [[Date date] dateByAddingTimeInterval:-3600];

NSFetchRequest *fetchRequest = .....
request.predicate = [NSPredicate predicateWithFormat:"starttime >= %@", hourAgo];