2016-05-05 2 views
1

У меня есть объект, называемый расписанием, в котором есть много сигналов тревоги (другой объект), я хочу получить только графики, которые имеют менее 30 будущих тревог. Поиск по всему я получаю этот запрос, который не работает /:Count query Core Data предикат

let predicateFutureAlarms = NSPredicate(format: "(alarms.date > %@)[email protected] < 30", NSDate().timeIntervalSince1970) 

(на время работы а (lldb) появляется на консоли и назначает на инициализации этой переменной)

ответ

3

Есть по крайней мере две проблемы:

  • "(alarms.date > %@)[email protected] < 30" не является допустимым синтаксисом предиката.
  • %@ заполнителя ожидает объекта, но NSDate().timeIntervalSince1970 является плавающей точкой числа.

Я не могу проверить это в настоящее время, но что-то, как это должно работать:

let now = NSDate() 
let predicate = NSPredicate(format: "SUBQUERY(alarms, $a, $a.date > %@)[email protected] < 30", now) 

Для каждого Schedule объекта, SUBQUERY(...) оценивает все связанные alarms объектов, которые имеют в date, которая больше, чем now.

См. "Predicate Format String Syntax" для общего описания предиката синтаксиса. Выражение «SUBQUERY» плохо документировано, сравнить NSExpression class reference или Quick Explanation of SUBQUERY in NSPredicate Expression.

+0

Спасибо !!!, он работает, в этом случае «дата» на самом деле является плавающей точкой, поэтому я изменяю% @ на% f. – user1779394

+0

@ user1779394: Добро пожаловать! - Я предположил, что «дата» является атрибутом «Дата» (что может быть более подходящим). –

Смежные вопросы