2009-05-12 5 views
5

Ich habe eine Anwendung mit Core Data und Bindungen. Ich möchte ein NSSearchField haben, das einen NSArrayController durchsuchen kann, der an NSTableView gebunden ist. Der Array-Controller enthält Core Data-Objekte, die ein "Name" -Feld haben. Ich habe das NSSearchField wie folgt eingerichtet:Verwenden Prädikate auf einem Array-Controller zum Filtern verwandter Objekte

Dies funktioniert. Ich möchte es so erweitern, dass es die Felder von Objekten durchsuchen kann, die mit denen im Array-Controller verwandt sind. Jedes Objekt im Array-Controller hat eine Zu-Viele-Beziehung zu einem anderen Objekttyp namens "Tag", der ein Feld namens "Name" enthält. Ich habe folgendes versucht:

Bind To: the array controller 
Controller Key: filterPredicate 
Model Key Path: tags 
Predicate Format: name contains[c] $value 

Dies funktioniert jedoch nicht. In NSTableView geschieht nichts, wenn Text in NSSearchField eingegeben wird. Was ist daran falsch?

Antwort

10

Die Bindung an tags als Modellschlüsselpfad versucht, das Suchfeldprädikat an den Schlüsselpfad arrayController.filterPredicate.tags zu binden. Da die Eigenschaft "filterPredicate" des Array-Controllers keine Eigenschaft "tags" hat, erhalten Sie wahrscheinlich "Schlüssel nicht gefunden" -Ausnahmen, die im Hintergrund protokolliert werden. Stattdessen erinnert, dass die filterPredicate eines NSArrayController an die Mitglieder des Arrays angewendet wird, möchten Sie die Bindung in etwa so eingerichtet 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 Es wird deutlicher, dass Tags eine Eigenschaft des Objekts sind, auf das das Prädikat angewendet wird.

+0

habe ich als mein Prädikat Format: self.tags.name enthält [c] $ value Und ich erhalte eine Fehlermeldung: Kann nicht einen Teilbetrieb mit etwas, das keinem String (LHS = {( "ABC", "XYZ", )} rhs = A) ich denke, das liegt daran, dass die linke Seite ein Behälter ist. Wie bekomme ich eine Zeichenfolge, wenn mehr als ein Tag-Objekt vorhanden ist? – hekevintran

+0

Egal, ich habe den Grund gefunden. Ich habe das Wort JEDER vergessen! – hekevintran

+0

Ausgezeichnet. Viel Glück. –