Данные ядра не определены по дате

#ios4

#ios4

Вопрос:

Я использую XCode 4 и IOS 4.3

LastWorn — это атрибут даты в модели coredata. В классе objective C устаревшим является NSDate. Используя objective-c, я могу установить и получить дату в базу данных coredata и из нее нормально. btnSearchOperator содержит > или < указатель даты.дата — это текущее выбранное значение параметра UIDatePicker

Я пытаюсь выполнить поиск в базе данных coredata, используя дату последнего использования в предикате. Извлечение из кода, который создает NSPredicate для запроса данных

 ... code not shown ...
if ([txtSearchDate.text length] > 0 )
{
    if ([predicate length] != 0) {
        [predicate appendString:@" AND "];
    }
    [predicate appendFormat:@"LastWorn %@ %@", [btnSearchOperator currentTitle], datePickerView.date];        
}
  

Приведенный выше код добавляет ‘Устаревший > 2011-04-20 14:00:00 0000’ к предикату, и он выходит из строя.

Журнал консоли 2011-04-23 22:34:17.805 iDresser[1216:207] * Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘Невозможно проанализировать строку формата»Type.Id == 0 И покупок == НЕТ И (изношены > 2011-04-20 14:00:00 0000)»‘

Если я использую инструмент F-Script CoreData Browser и создаю тестовый запрос «LastWorn!= nil», отображаются правильные результаты.

Если я запрашиваю «Прошлогодний> 2011-01», он показывает то же самое, что и прошлогодний!= nil и неверен.

Если я запрашиваю «Срок службы> 2011», я получаю «Исключение NSInvalidArgumentException: -[NSCFNumber timeIntervalSinceReferenceDate]: нераспознанный селектор, отправленный экземпляру 0x20048a920»

Я просто хочу найти все элементы с датой истечения срока службы меньше указанного значения? Любые предложения будут оценены.

Ответ №1:

Я столкнулся с той же проблемой, вам нужно создать свой предикат, используя:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"LastWorn %@ %@", [btnSearchOperator currentTitle], datePickerView.date]
  

Сбой, если вы создаете свой предикат в строке, а затем устанавливаете его в предикат

Комментарии:

1. Это исправило проблему. Спасибо, что нашли время ответить на мой вопрос.