Objective c 按当前时间筛选的NSPredicate

Objective c 按当前时间筛选的NSPredicate,objective-c,sqlite,core-data,nspredicate,nsfetchrequest,Objective C,Sqlite,Core Data,Nspredicate,Nsfetchrequest,我正在尝试创建一个基于当前时间筛选记录的NSPredicate(用于NSFetchRequest、NSFetchedresultsController中的核心数据) 非创建谓词的时间: [NSPredicate predicateWithFormat:@“(临界日期)

我正在尝试创建一个基于当前时间筛选记录的
NSPredicate
(用于
NSFetchRequest
、NSFetchedresultsController中的核心数据)

创建谓词的时间:

[NSPredicate predicateWithFormat:@“(临界日期)<%@),[NSDate日期]]

但是计算谓词的时间,因为我希望避免始终使用新的fetchRequests更新fetchedResultsController。我正在寻找的(但我自己找不到)是这样的:

[NSPredicate predicateWithFormat:@“(关键日期)

这是针对iPhone的,这意味着不支持
now()
,因此我想无论解决方案是什么,它都会是一种黑客行为

提前感谢

您要使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"criticalDate < now()"];
NSPredicate*谓词=[NSPredicate predicateWithFormat:@“criticalDate
如果在提取之前创建谓词,则创建谓词的时间与执行提取的时间之间的差值最多可能为一毫秒

我无法想象这样的使用场景会有什么重要意义。请解释一下

但是,如果这个时差对您来说实在太大,我建议以下解决方案。运行两个测试,找出最可能的时差。然后,当您创建谓词时,将时差添加到未来。因此:

[NSPredicate predicateWithFormat:@"criticalDate < %@", 
   [[NSDate date] dateByAddingTimeInterval:0.001]]; 
[NSPredicate谓词格式:@“criticalDate<%@”,
[[NSDate date]dateByAddingTimeInterval:0.001]];

我猜这个问题有点学术性…:-)

抱歉,请获取当前日期。那么,你说的不是谓词被创建的时间是什么意思?@Flex\u addicied他指的是谓词被计算的时间,不是谓词被创建的时间。是的,是谓词被计算的时间。我正在研究做一个predicateWithBlock,但没有得到我想要的结果。谓词(这次比较是其中的一部分)由应用程序的一个单独部分生成,并交给视图控制器。模型中有多个时间戳,谓词生成代码选择它想要与now()比较的时间戳,因此可以在视图控制器使用谓词之前“某个时间”生成谓词。然后只需在创建谓词时保留一个时间戳,并在获取时相应地调整它。这在iOS中不起作用。至少我不能让它工作,而且上面说
now()
只适用于OS X 10.5+为什么,你完全正确!谢谢你澄清这一点。比
predicateWithBlock:
kludge I调制的更好/更干净。谢谢您,先生,还有+1。我想这里的混乱是核心数据不支持
now()
函数。如果您尝试在获取中使用它,它将抛出
不支持的函数表达式now()
@MikeAbdullah实际上,IIRC对
now()
函数的支持已添加到iOS 8中。啊,现在知道这一点很有意思。我用iOS 7.1测试了这个