2009-08-04 4 views
1

Ich habe über Interface Builder einen NSCollectionView eingerichtet. Meine Prototypansicht enthält eine Fortschrittsanzeige und ein Textfeld. Ich habe die Bindungen so eingerichtet, dass mein "Aufgaben" -Objekt den Wert des Fortschrittsindikators und des Textfeldwerts beibehält.NSCollectionView aktualisiert Subviews bei Datenänderung nicht

Alles funktioniert in Ordnung, wenn ich neue Objekte zur Sammlung hinzufüge (über [NSCollectionView newItemForRepresentedObject:], die ich meinem Array-Controller hinzufügen). Der Anfangswert der Fortschrittsanzeige und das Textfeld werden entsprechend eingestellt. Wenn sich die Werte jedoch ändern, wird dies nicht in der Prototypansicht angezeigt. Die Werte behalten immer ihren Anfangswert.

Ich habe versucht, einen Zeiger auf die Prototyp-Ansicht in der "Aufgabe" -Objekt hinzufügen und versuchen, eine Aktualisierung über [NSView setNeedsDisplay:TRUE] erzwingen, aber ohne Erfolg. Ich habe die Prototyp-Ansicht subclassiert und dem Verlaufsindikator einen Ausgang gegeben, so dass ich ihn zur Laufzeit auf seinen Wert prüfen konnte und komischerweise, obwohl die Ansicht erfolgreich erstellt wurde, ist die Fortschrittsanzeige nicht! Ziemlich widersprüchlich zur Tatsache, dass es tatsächlich einen Anfangswert anzeigt und aufrechterhält!

Gibt es eine Möglichkeit, die Änderungen in der Ansicht mit dem aktuellen Setup zu propagieren?

Vielen Dank im Voraus.

Antwort

2

Ihr Bindungsaufbau sollte ausreichend sein.

Wofür ist Ihr Fortschrittsindikator gebunden? Stellen Sie sicher, dass KVO-Benachrichtigungen gesendet werden, wenn der Fortschrittswert aktualisiert wird.

+0

Der Wert des Fortschrittsbalkens ist an einen Wert vom Typ Double Variable gebunden. Es wird auch von einer Steckdose referenziert, die in der Unterklasse der Prototypansicht definiert ist. Was genau meinen Sie damit, dass es KVO-Benachrichtigungen versendet? –

+0

Yip, das war es in Ordnung, anstatt die Setter-Methode - verwenden Sie [self setValue: forKey]! Vielen Dank! –

+0

Sie sollten diese Antwort als korrekt markieren :-) –