Muss ich bei NSTreeController manuell ein NSOutlineView neu laden, wenn ich das Modellarray ändere?

8

Ich habe ein baumähnliches Modell, das ich in einer NSOutlineView mit einem NSTreeController zeigen möchte.

Ich konnte die Bindungen einrichten, und alles funktioniert gut, solange ich die Funktionen Einfügen und Entfernen des NSTreeControllers verwende, um meine Modellstruktur zu ändern. Wenn ich versuche, den Modellbaum direkt einzufügen oder zu entfernen, wird NSOutlineView in einigen Fällen nicht aktualisiert.

Wenn ich ein Objekt in eine erweiterte Gruppe von Objekten einfüge, funktioniert es:

Aber wenn ich versuche, das erste Objekt zu einem Knoten hinzuzufügen, der vorher keine Kinder hatte, passiert nichts. Das Dreieck der Offenlegung wird nicht angezeigt, daher kann ich es nicht erweitern, um den neuen Knoten zu sehen.

Wenn ich den Mauszeiger über diesen Knoten mit einem neuen Objekt bewege, wird er erweitert und ich kann das zweite Kind ohne Probleme hinzufügen. Aber das Dreieck ist immer noch unsichtbar:

Schließlich, wenn ich die Eltern aller dieser Knoten schließe und sie wieder öffne (was ein Neuladen auslöst), erscheint plötzlich das Dreieck:

Deshalb habe ich mich gefragt, ob ich die Zeilen von NSOutlineView manuell neu laden muss, um das Dreieck sichtbar zu machen, oder ob ich etwas kaputt mache? Danke !!

UPDATE:

In meiner Knoten-Klasse füge ich ein neues Kind wie folgt hinzu:

%Vor%

Und ich habe diese auch implementiert (was ich in IB für meinen NSTreeController eingestellt habe):

%Vor%

Ich weiß, dass dies (besonders childNodes ) nicht sehr optimiert ist, aber ich experimentiere nur im Moment, da in der endgültigen Version meine Kinder in einem C-Array gespeichert werden.

UPDATE 2:

Ich habe auch versucht, KVO-Benachrichtigungen für die anderen 2 Eigenschaften zu senden, aber das hat auch nicht geholfen.

%Vor%     
DrummerB 09.05.2012, 23:47
quelle

1 Antwort

2

Sie müssen sicherstellen, dass alle Aktualisierungen Ihres Modells in einer den Schlüsselwerten beobachtenden Weise durchgeführt werden.

Themen zur Programmierung von Cocoa Bindings: Fehlerbehebung bei Cocoa-Bindungen

    
Ken Thomases 10.05.2012, 00:16
quelle