Автоматически сгенерированные шаблоны строк предикатов для ключа to-many? - PullRequest
3 голосов
/ 17 октября 2008

В моей модели управляемых объектов Core Data у меня есть сущность Foo с отношением ко-многим (с обратным ко-многим) к сущности Baz с именем baz. Baz имеет строковое свойство с именем «tag». Когда я использую [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription] для создания редакторов строк для NSPredicateEditor, результат содержит (как и ожидалось) шаблон строки, например

[Popup: baz.tag] [Popup: Contains | is | is | not | ...] [TextField]

Когда я выбираю «Содержит» во всплывающем окне, запрос с предикатом работает как ожидалось. Если я выбираю любое из других всплывающих окон (например, «is»), я получаю следующую ошибку: «ключ to-many здесь не разрешен». Могу ли я использовать [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:] или мне нужно создать редактор строк вручную?

1 Ответ

4 голосов
/ 22 октября 2008

Похоже, что автоматически сгенерированный шаблон (с использованием [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];
...