NSArrayController macht mit filterPredicate was er will :(

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSArrayController macht mit filterPredicate was er will :(

    Okay, ich habe einen ArrayController, der eine IKImageBrowserView mit Bildern versorgt.
    Zusätzlich hat jedes Bild einen Status, der einen Wert von 0-2 annehmen kann.

    Ich möchte den Inhalt der IKImageBrowserView nun basierend auf den jeweiligen Status-Werten der Bilder filtern.
    Was ich gerne hätte, ist quasi eine Maske mit den Optionen:
    - Alle Elemente anzeigen
    - Nur Elemente mit Status == 0 anzeigen
    - Nur Elemente mit Status == 1 anzeigen
    - Nur Elemente mit Status == 2 anzeigen
    - Nur Elemente mit Status != 0 anzeigen
    - Nur Elemente mit Status != 1 anzeigen
    - Nur Elemente mit Status != 2 anzeigen

    Passend hierfür habe ich bereits die jeweiligen Predicates, sowie einen NSPopupButton mit jeweiligen Bindings.
    wenn ich nun [arrayController setFilterPredicate:self.predicate]; ausführe, so wird die View auch entsprechend gefiltert.

    Sobald ich jedoch von einem beliebigen Element den Status ändere, hebt der ArrayController munter seine Filterung auf. WTF? ;(
    Gleiches gilt für das Hinzufügen von Elementen. (wobei dieses sich ja mit "setClearsFilterPredicateOnInsertion:NO" ausschalten lässt, auch wenn's dann leider Exceptions spuckt)
    Jegliche Filterung ist weg. Wenn ich jedoch [arrayController filterPredicate] abrufe, so spuckt er den korrekten (sprich gewünschten) NSPredicate aus.
    Nur was bringt's mir, wenn er scheinbar ignoriert wird?

    Was muss ich tun, damit mein NSArrayController nicht nach jeder Änderung eines gelisteten
    (oder dem Einfügen eines neuen) Elements seinen NSPredicate vergisst (was dessen Verwendung angeht zumindest)?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Da_Vinci ()

  • Meine Probleme damit sind schon etwas länger her, wenn ich mich aber recht entsinne (war aber 10.5), dann sind Filter-Predicates nicht – hmmm,wie nenne ich das jetzt – observierungsfest. Soll heißen: Der schaut beim Setzen des Predicates nach. Wenn sich etwas in der Datenbasis ändert, wird das nicht automatisch der Filter aktualisiert. Dazu musst du IIRC selbst observieren und den Filter neu triggern.

    Ich hatte dazu mal was angefangen, was die Pfade in den Prädikaten analysiert und entsprechende Observierungen einrichtet. Ist aber sicherlich irgendwo auf meiner Festplatte verstaubt. So in 1 bis 2 Monaten finde ich die Zeit nachzuschauen. :)

    +++


    Hmmmm, wäre ja auch ein schönes Thema …
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Amin Negm-Awad ()