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测试了这个