2016-06-07 11 views
0

Ich bin ein Mac App zu entwickeln, die Core-Daten verwendet. Ich verwende NSOutlineView und NSTreeController, um Daten in der Ansicht zu binden.Filtering Kinder NSOutlineView mit NSTreeController

Sie können die Struktur meiner Daten übernehmen als

  • Eltern Artikel 1
    • Kind Artikel 1
    • Kind Artikel 2
    • Kind Artikel 3
  • Eltern Artikel 2
    • Kind Artikel 4
    • Kind Artikel 5

Ich bin ein fetchPredicate meiner NSTreeController Anwendung der Daten erfolgreich zu filtern. Auf der anderen Seite wird das fetchPredicate nur auf die erste Ebene der Daten angewendet (zu übergeordneten Elementen).

Ich brauche eine Methode, die ich ein fetchPredicate auch auf die untergeordneten Elemente anwenden kann. Zum Beispiel, wenn meine Kriterien erfüllt zu Child Artikel 1 und Kind Punkt 4 sollte das Ergebnis

  • Eltern Artikel 1
    • Kind Artikel 1
  • Eltern Artikel 2
    • Kind sein Artikel 4

Jede Hilfe wird geschätzt.

+0

Was genau ist Ihre Frage? Mit welchem ​​Problem haben Sie Probleme beim Filtern von Kinderartikeln? –

+0

Danke für die Antwort. Wie ich in meiner Frage erwähnt habe, verwende ich ein FilterPredicate auf NSTreeController. Beispiel: NSPredate (Format: due_on = <% @ ", endDate!). Dieser Filter wird jedoch nur auf die übergeordneten Elemente angewendet, nicht jedoch auf die untergeordneten Elemente. Ich sehe weiterhin einige untergeordnete Elemente, die diesem Kriterium nicht entsprechen Was ich brauche, ist, meinen Filter nur auf die zweite Ebene anzuwenden. Nochmals vielen Dank. – emreoktem

+1

Sie wenden ein Fetch-Prädikat an. NSTreeController unterstützt kein Filterprädikat. NSTreeController ruft die Top-Level-Objekte ab und verwendet die Child-Beziehung, um die Kinder.Wenn Sie die Kinder filtern möchten, müssen Sie etwas programmieren. – Willeke

Antwort

0

Sie Prädikat a holen sich bewerben. NSTreeController unterstützt kein Filterprädikat. NSTreeController verwendet das Abrufprädikat, um die Objekte der obersten Ebene abzurufen, und verwendet die untergeordnete Beziehung, um die untergeordneten Objekte abzurufen. Die Kinder werden nicht abgeholt, und das Fetch-Prädikat wird nicht verwendet, um die Kinder zu bekommen.

Lösung 1: implementieren eine berechnete Eigenschaft filteredChildren, wie in dieser Frage: Filtering A Tree Controller und in dieser nicht verwandten Antwort erwähnt: Is it possible to bind an NSTreeController to an NSOutlineViewDataSource?

Lösung 2: eine Datenquelle anstelle von Bindungen verwenden, auch in der obigen Antwort erwähnt.

+0

Lösung 1 ist perfekt. Vielen Dank – emreoktem