我的NSDate
中有一个ManagedObject
数组,我想使用一个表达式创建一个NSFetchRequest
,这个表达式现在只提供NSDate
。
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"eventDate"];
NSExpression *futureDateExpression = [NSExpression expressionForFunction:@"> now" arguments:[NSArray arrayWithObject:keyPathExpression]];
我正在试图弄清楚如何编写这个函数。我尝试了其他变体,例如SELF > now
或%@ > now
,SELF > now()
所有这些都给了我SIGABRT
。
答案 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]];