Automatisch generierte Prädikat-Zeilenvorlagen für To-Viele Key?
-
03-07-2019 - |
Frage
In meinem Kerndaten-Objektmodell habe ich ein Entität mit einer to-vielen-Beziehung (mit einem umgekehrten Inverse) zu Entity Baz namens Baz. BAZ hat eine String -Eigenschaft mit dem Namen "Tag". Wenn ich benutze [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription]
Um die Zeileneditoren für einen NSpredicateEditor zu erstellen, enthält das Ergebnis (wie erwartet) eine Zeilenvorlage wie
Popup: Baz.tag] [Popup: enthält | is | is nicht | ...] [Textfield
Wenn ich aus dem Popup "enthält" aus wähle, funktioniert eine Abfrage mit dem Prädikat wie erwartet. Wenn ich eines der anderen Popups auswähle (z. B. "IS"), bekomme ich den folgenden Fehler: "TO-Many Key, das hier nicht erlaubt ist". Kann ich benutzen [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
Oder muss ich den Zeileneditor manuell erstellen?
Lösung
Es sieht aus wie die automatisch generierte Vorlage (verwendet [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
) kann nicht die richtigen Operatoren produzieren. Die Lösung besteht darin, die Vorlage manuell verwendet zu erstellen [NSPredicateEditorRowTemplate initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:]
. Für das gegebene Beispiel:
id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];