У меня есть модель с событиями, у которых есть несколько UpcomingDates, каждое из которых имеет дату свойства типа (NS) Date. Я создаю запрос на выборку, чтобы получать только те события, которые имеют предстоящие даты между двумя заданными датами. Проблема в том, что независимо от того, как я форматирую даты ввода в моем предикате, я получаю исключение. Похоже, Core Data хочет, чтобы мои аргументы предиката были как NSDates, так и NSNumbers.
Когда я передаю NSNumbers, выполняя @ ([date timeIntervalSinceReferenceDate]), я вижу следующее:
predicate: 0 != SUBQUERY(upcomingDates, $upcomingDate, $upcomingDate.date >= 387270000 AND $upcomingDate.date <= 387356400).@count
-[__NSCFNumber timeIntervalSinceReferenceDate]: unrecognized selector sent to instance 0x865a0b0
Когда я иду интуитивно понятным путем с простыми старыми NSDates, я вижу следующее:
predicate: 0 != SUBQUERY(upcomingDates, $upcomingDate, $upcomingDate.date >= CAST(387270000.000000, "NSDate") AND $upcomingDate.date <= CAST(387356400.000000, "NSDate")).@count
-[__NSDate objCType]: unrecognized selector sent to instance 0x86c6450
Распечатывая объект, получающий нераспознанный селектор, он всегда является первым из аргументов предиката.
Я в меру своих возможностей убедился, что upcomingDate.date на самом деле является NSDate (это то, что указывает модель, но я также посмотрел на то, что было передано при их создании). Я пробовал использовать каждую перестановку CAST в NSDates и NSNumbers. Я разбил предикат до простейшего возможного случая, что на самом деле означает просто удаление одного из предикатов подзапроса с AND. Я в тупике.
ETA: Предикаты следующие. Номера NS:
[NSPredicate predicateWithFormat:@"0 != (SUBQUERY(upcomingDates, $upcomingDate, ($upcomingDate.date >= %@) AND ($upcomingDate.date <= %@))).@count", @([self.timeFilterRange[0] timeIntervalSinceReferenceDate]), @([self.timeFilterRange[1] timeIntervalSinceReferenceDate])]
NSDates:
[NSPredicate predicateWithFormat:@"0 != (SUBQUERY(upcomingDates, $upcomingDate, ($upcomingDate.date >= %@) AND ($upcomingDate.date <= %@))).@count", self.timeFilterRange[0] , self.timeFilterRange[1] ]
timeFilterRange
? - person CodaFi   schedule 11.04.2013