Какой правильный синтаксис для замены переменных при использовании пользовательского предиката в сохраненном запросе на выборку? - PullRequest
0 голосов
/ 16 января 2019

В этом вопросе SO от 2010 OP спрашивает, как выполнить форматирование хранимого запроса на выборку, созданного в графическом интерфейсе XCode, чтобы обеспечить возможность подстановки переменной, когда хранимый запрос вызывается во время выполнения с использованием NSFetchRequest: fetchRequestFromTemplateWithName :. substitutionVariables

Apple имеет некоторую архивную документацию , в которой говорится о том, как сделать это в Obj-C, но Swift обрабатывает переменные по-разному, и я не нашел нигде документированного синтаксиса.

В моем приложении я ищу аудио дорожку, которая относится к определенной категории. Трек имеет атрибут trackCategory, который определяется как Int64

В моем шаблоне Fetch Request я настроил пользовательский предикат с оператором trackCategory == $TRACKCATEGORY. Насколько я понимаю, я устанавливаю условие, при котором объект будет возвращен, только если значение trackCategory объекта соответствует значению переменной с именем $TRACKCATEGORY, которое будет подставлено во время выполнения.

enter image description here

И затем в своем коде я пытаюсь вызвать этот хранимый запрос на выборку следующим образом:

fetchRequest = model.fetchRequestFromTemplate(withName: 
"getUnplayedTracks", substitutionVariables: ["TRACKCATEGORY" : forCategory])!

Две вещи:

  1. model объявляется в верхней части ViewController (этот документ) как:

let model = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.managedObjectModel.

  1. forCategory - это Int64, объявленное в другом месте.

Когда я собираю и запускаю это, я получаю SIGABRT с сообщением об ошибке:

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «невозможно разрешить выражение переменной: $ TRACKCATEGORY»

Я уверен, что что-то упустил из-за того, как отформатирован оператор предиката Custom, но я просто не могу понять, что это такое.

...