使用'now'进行NSExpression的功能

时间:2012-02-02 19:28:07

标签: objective-c ios nsdate nsfetchrequest

我的NSDate中有一个ManagedObject数组,我想使用一个表达式创建一个NSFetchRequest,这个表达式现在只提供NSDate

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"eventDate"];
NSExpression *futureDateExpression = [NSExpression expressionForFunction:@"> now" arguments:[NSArray arrayWithObject:keyPathExpression]];

我正在试图弄清楚如何编写这个函数。我尝试了其他变体,例如SELF > now%@ > nowSELF > now()

所有这些都给了我SIGABRT

2 个答案:

答案 0 :(得分:2)

1)您需要NSPredicate

2)我不确定所有后端都支持now()

3)但是您现在可以评估并将其替换为参数:

NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > %@", [NSDate date]];
[fetchRequest setPredicate:p];

答案 1 :(得分:1)

由于您在那里进行了比较,因此您没有NSExpression,而是NSPredicate

NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > now()"];
[fetchRequest setPredicate:p];

事实证明,如果您在SQLite支持的CoreData商店上使用此谓词,则无法使用now()。你可以做的是这个(suggested by @Krizz):

NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > %@", [NSDate date]];