Modelos de linha predicados gerados automaticamente para a chave para muitos?
-
03-07-2019 - |
Pergunta
No meu modelo de objeto gerenciado por dados, tenho uma entidade Foo com um relacionamento para muitos (com um inverso para muitos) para a entidade Baz chamada Baz. O BAZ tem uma propriedade de string chamada "Tag". Quando eu uso [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription]
Para criar os editores da linha para um nspredicateEditor, o resultado contém (como esperado) um modelo de linha como
Pop -up: baz.tag] [pop -up: contém | is | não | ...] [Textfield
Quando eu seleciono "contém" no pop -up, uma consulta com o predicado funciona conforme o esperado. Se eu escolher algum dos outros pop-ups (por exemplo, "é"), recebo o seguinte erro: "To-muitos não permitida aqui". Eu posso usar [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
Ou tenho que construir o editor de filas manualmente?
Solução
Parece o modelo gerado automaticamente (usando [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
) não pode produzir os operadores corretos. A solução é criar o modelo usando manualmente [NSPredicateEditorRowTemplate initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:]
. Para o exemplo dado:
id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];