Использование NSDate в NSPredicate - PullRequest
6 голосов
/ 11 июня 2011

Есть ли конкретный способ настроить NSPredicate для сравнения дат?

По существу, у меня есть объект Photo с NSDate, lastViewed.

Я бы хотел настроить NSPredicate, которыйвернет все объекты Photo, которые были просмотрены более поздние, чем указанный период времени - обычно два дня.

Я получаю прошедшую дату следующим образом:

NSTimeInterval secondsPast = -172800;</p> <p>NSDate * twoDaysPast = [NSDate dateWithTimeInterval:secondsPast sinceDate:[NSDate date]]; И настраиваюNSPredicate таким образом:

request.predicate = [NSPredicate predicateWithFormat:@"lastViewed > %@", twoDaysPast];

Однако я не получаю никаких результатов, и я не совсем уверен, почему.

Я знаю, что все мои объекты Photo имеют lastViewedset - это значение по умолчанию, установленное сейчас, всякий раз, когда фотография добавляется в базовые данные, поэтому по умолчанию я должен видеть, что каждое фото, созданное как lastViewed, будет более поздним, чем мой twoDaysPast NSDate.два экземпляра NSDate таким образом?

Ответы [ 2 ]

5 голосов
/ 02 июля 2012

Я успешно использовал NSDate метод класса dateWithTimeIntervalSinceNow: (и вы можете сделать это все в одной строке) следующим образом:

request.predicate = [NSPredicate predicateWithFormat:@"recentPhotoLastViewed > %@", [NSDate dateWithTimeIntervalSinceNow:(-172800)]];

Убедитесь, что объекты lastViewed в CoreData действительноNSDate объекты, а не строки.

NSDate объекты можно сравнивать напрямую, используя метод NSDate compare:.Даты основаны на количестве времени, прошедшего с контрольной даты typedef, что позволяет дате быть, таким образом, большей или меньшей, чем другая дата.Это описано здесь .

2 голосов
/ 11 июня 2011

Это правильный способ использовать NSDates в NSPredicates.Если это не работает, вы пытались удалить предикат и убедиться, что остальная часть запроса работает?Вам также может потребоваться проверка вашего предиката с помощью NSLog'ing перед запуском запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...