使用“现在”的 NSExpression 函数
Posted
技术标签:
【中文标题】使用“现在”的 NSExpression 函数【英文标题】:Function for NSExpression using 'now' 【发布时间】:2012-02-02 19:28:07 【问题描述】:我的ManagedObject
中有一个NSDate
数组,我想使用稍后只给我NSDate
的表达式创建一个NSFetchRequest
。
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"eventDate"];
NSExpression *futureDateExpression = [NSExpression expressionForFunction:@"> now" arguments:[NSArray arrayWithObject:keyPathExpression]];
我正试图弄清楚如何编写这个函数。我尝试了其他变体,例如 SELF > now
或 %@ > now
、SELF > now()
所有这些都给了我SIGABRT
。
【问题讨论】:
【参考方案1】:1) 你需要NSPredicate
。
2) 我不确定所有后端都支持now()
。
3) 但是您现在可以评估并将其替换为参数:
NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > %@", [NSDate date]];
[fetchRequest setPredicate:p];
【讨论】:
now()
是一个有效的函数:developer.apple.com/library/mac/documentation/Cocoa/Reference/…
@DaveDeLong 对,可能只是后端不支持它。已更新。
@Lucien 我们很高兴它能正常工作! :) 您应该通过单击左侧的复选标记将 Krizz 的答案标记为正确【参考方案2】:
由于您在那里进行了比较,因此您没有NSExpression
,而是NSPredicate
:
NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > now()"];
[fetchRequest setPredicate:p];
事实证明,如果您在 SQLite 支持的 CoreData 存储上使用此谓词,您将无法使用 now()
。你可以做的是(如suggested by @Krizz):
NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > %@", [NSDate date]];
【讨论】:
感谢您的回复。我更改了代码,但现在出现了错误:*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的函数表达式 now()”以上是关于使用“现在”的 NSExpression 函数的主要内容,如果未能解决你的问题,请参考以下文章
NSExpression 使用 sqrt: 函数导致 NSInvalidArgumentException
使用 NSExpression 时捕获 NSInvalidArgumentException 的正确方法 [重复]