Verwendung von Prädikaten auf einem Array-Controller zu filtern verwandte Objekte
-
21-08-2019 - |
Frage
Ich habe eine Anwendung mit Core Data und Bindungen. Ich möchte eine NSSearchField haben, die durch eine NSArrayController gebunden an einen NSTableView suchen. Der Array-Controller enthält Core Data-Objekte, die einen „Namen“ Feld haben. Ich habe Setup die NSSearchField wie folgt aus:
Bind To: the array controller
Controller Key: filterPredicate
Predicate Format: name contains[c] $value
Das funktioniert. Ich mag es so erweitern, dass sie auf die Felder von Objekten suchen können, um die in den Array-Controller zusammen. Jedes Objekt in dem Array-Controller verfügt über eine n-Beziehung zu einer anderen Art von Objekt namens „tag“, die ein Feld „name“ genannt hat. Ich habe versucht, die folgenden:
Bind To: the array controller
Controller Key: filterPredicate
Model Key Path: tags
Predicate Format: name contains[c] $value
Dies ist jedoch nicht funktioniert. Nichts geschieht im NSTableView wenn die Texteingabe in das NSSearchField ist. Was mit ihm falsch ist?
Lösung
Die Bindung an tags
als das Modell Schlüsselpfad versucht, das Suchfeld eines Prädikat zu dem Schlüsselpfad arrayController.filterPredicate.tags zu binden. Da die filterPredicate Eigenschaft der Array-Controller keine Tags Eigenschaft hat, sind Sie wahrscheinlich ‚Schlüssel nicht gefunden‘ gettings Ausnahmen, die leise protokollieren. Stattdessen erinnert, dass die filterPredicate eines NSArrayController an die Mitglieder des Arrays angewendet wird, möchten Sie die Bindung so etwas wie dieses aufgebaut werden:
Bind To: <array controller>
Controller Key: filterPredicate
Predicate Format: ANY self.tags contains[c] $value
self.tags
als nur tags
geschrieben werden könnte, aber ich denke, das macht deutlicher, dass Tags eine Eigenschaft des Objekts ist, auf die das Prädikat angewandt wird.