NSPredicate过滤当前时间

时间:2012-05-19 07:05:13

标签: objective-c sqlite core-data nspredicate nsfetchrequest

我正在尝试创建一个NSPredicate(用于NSFetchRequest中的核心数据,NSFetchedresultsController),根据当前时间过滤记录。

创建谓词的时间:

[NSPredicate predicateWithFormat:@"(criticalDate < %@)", [NSDate date]]

但是评估谓词的时间,因为我想避免一直使用新的fetchRequests更新fetchedResultsController。我正在寻找的东西(但我自己找不到)是这样的:

[NSPredicate predicateWithFormat:@"(criticalDate < ????)"]

适用于iPhone,这意味着now()不受支持,所以无论解决方案是什么,它都会是一种黑客攻击。

提前致谢

2 个答案:

答案 0 :(得分:7)

您想使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"criticalDate < now()"];

答案 1 :(得分:0)

如果在获取之前创建谓词,则创建谓词的时间与执行获取的时间之间的差异最多为1毫秒。

我无法想象这对任何重要的使用场景。请解释一下。

但是,如果这个时间差异真的太大了,我建议采用以下解决方案。运行几个测试来找出最可能的时差。然后,在创建谓词时,将时差添加到将来。因此:

[NSPredicate predicateWithFormat:@"criticalDate < %@", 
   [[NSDate date] dateByAddingTimeInterval:0.001]]; 

我想这个问题有点学术......: - )