Modelli di riga del predicato generati automaticamente per la chiave to-many?
-
03-07-2019 - |
Domanda
Nel mio modello a oggetti gestiti Core Data, ho un'entità Foo con una relazione a molti (con un'inverso a molti) all'entità Baz di nome baz. Baz ha una proprietà stringa denominata " tag " ;. Quando uso [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths: [NSArray arrayWithObject: @ " baz.tag "] inEntityDescription: FooDescription]
per creare gli editor di righe per un NSPredicateEditor, il risultato contiene (come previsto) una riga
[Popup: baz.tag] [Popup: Contiene | is | is | |]] [TextField]
Quando seleziono " Contiene " dal popup, una query con predicato funziona come previsto. Se scelgo uno qualsiasi degli altri popup (ad es. "È ""), visualizzo il seguente errore: "chiave a molti non consentita qui". Posso usare [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths: inEntityDescription:]
o devo creare manualmente l'editor di righe?
Soluzione
Sembra che il modello generato automaticamente (usando [NSPredicateRowEditorTemplate templateWithAttributeKeyPaths: inEntityDescription:]
) non sia in grado di produrre gli operatori corretti. La soluzione è creare manualmente il modello usando [NSPredicateEditorRowTemplate initWithLeftExpressions: rightExpressionAttributeType: modificatore: operatori: opzioni:]
. Per l'esempio fornito:
id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];