Базовые данные NSDate Сравнение - PullRequest
2 голосов
/ 20 июня 2010

Я храню атрибут даты в Базовых данных, используя datePicker на iPhone. Затем я хочу сравнить дату, соответствующую определенной дате, используя ==, но не могу заставить ее работать. Хотя больше и меньше, чем кажется, работает нормально.

Сначала я сохранял дату непосредственно из DatePicker, который также включал информацию о времени. Поэтому я использовал NSCalendar, чтобы убрать время и просто сохранить дату.

Точно так же я беру rhs предиката и запускаю его через NSCalendar, чтобы извлечь только дату и выполнить сравнение, и я все еще не могу заставить работать ==.

Попытался создать NSLog для даты, хранящейся в CoreData, и сравниваемой даты, и они выглядят совершенно одинаково 2010-06-19 00:00:00 -7: 00

Будут оценены любые указатели.

EDIT: Я пытаюсь выполнить сравнение в CoreData, используя NSEqualToPredicateOperatorType, переданный в

+ (NSPredicate *)predicateWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs modifier:(NSComparisonPredicateModifier)modifier type:(NSPredicateOperatorType)type options:(NSUInteger)options

с указанием lhs в качестве ключевого пути к entity.dateAttribute и rhs является [NSExpression expressionForConstantValue: myDate];

PS: у меня был вышеуказанный код, а затем я понял, что myDate состоит из компонента времени, поэтому я изменил приведенный выше код, чтобы извлечь только день, месяц и год и использовать его для отправки его в NSExpression.

Аналогичным образом, сохраняя дату, я убедился, что извлекаю только дату, месяц и год и передаю ее в CoreDate, эффективно делая время 00:00:00 (надеюсь!)

1 Ответ

0 голосов
/ 11 марта 2011

Метод compare: в классе NSDate даст вам то, что вы ищете.

Возвращаемое значение

Если:

  • Получатель и другая дата точно совпадают, NSOrderedSame
  • Получатель позже, чем другая дата, NSOrderedDescending
  • Получатель раньше времени, чем другая дата, NSOrderedAscending.

В общем, если вы пытаетесь сравнить два объекта, найдите для этого метод класса / экземпляра. Сравнение двух указателей объектов с == просто сравнит сами указатели, а это не то, что вам нужно.

...