Функция для NSExpression с использованием «сейчас» - PullRequest
1 голос
/ 02 февраля 2012

У меня есть массив NSDate из моего ManagedObject, и я хочу создать NSFetchRequest, используя выражение, которое даст мне только NSDate позже, чем сейчас.

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

Iпытаюсь выяснить, как написать эту функцию.Я пробовал другие варианты, такие как SELF > now или %@ > now, SELF > now()

Все это дает мне SIGABRT.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

1) Вам понадобится NSPredicate.

2) Я не уверен, что now() поддерживается во всех бэкэндах.

3) Однако вы можете оценить сейчас и заменить егов качестве параметра:

NSPredicate *p = [NSPredicate predicateWithFormat:@"eventDate > %@", [NSDate date]];
[fetchRequest setPredicate:p];
1 голос
/ 02 февраля 2012

Поскольку у вас есть сравнение, у вас нет NSExpression, а скорее NSPredicate:

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

Как оказалось, если вы используете этот предикат в хранилище CoreData, поддерживаемом SQLite, вы не сможете использовать now(). Вместо этого вы можете сделать следующее (как предложено @ 1008 * @ Krizz ):

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