Автоматически сгенерированные шаблоны строк предикатов для ключа to-many?
-
03-07-2019 - |
Вопрос
В моей объектной модели, управляемой основными данными, у меня есть объект Foo с отношением "ко многим" (с обратным отношением "ко многим") к объекту Baz с именем baz .У Baz есть строковое свойство с именем "tag".Когда я использую [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription]
чтобы создать редакторы строк для NSPredicateEditor, результат содержит (как и ожидалось) шаблон строки типа
[Всплывающее окно:baz.tag] [Всплывающее окно:Содержит |является|не является|...] [Текстовое поле]
Когда я выбираю "Содержит" во всплывающем окне, запрос с предикатом работает так, как ожидалось.Если я выберу любое из других всплывающих окон (например"is"), я получаю следующую ошибку:"ключ "ко многим" здесь не разрешен".Могу ли я использовать [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
или мне нужно создать редактор строк вручную?
Решение
Это выглядит как автоматически сгенерированный шаблон (с использованием [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
) не удается создать правильные операторы.Решение состоит в том, чтобы создать шаблон вручную, используя [NSPredicateEditorRowTemplate initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:]
.Для приведенного примера:
id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];