Ich habe eine NSCollectionView, deren Inhalt von einem NSArrayController behandelt wird. Die NSCollectionView ist auswählbar und ich muss eine Liste der ausgewählten Elemente abrufen. Ich versuche, die Schlüsseleigenschaft von NSArrayController "selectionIndexes" zu beobachten, aber es gibt mir nur IMMER den Wert des ersten Elements in CollectionView und nicht die ausgewählten Elemente.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualTo:@"selectionIndexes"])
{
//True if in the array controller of the collection view really exists at least a selected object
if([[arrayController selectedObjects] count] > 0)
{
NSLog(@"Selected objects: %@", [arrayController selectedObjects]);
}
else
{
NSLog(@"Observer called but no objects where selected.");
}
}
}
UPDATE
Ich bekomme diese Methode nie aufgerufen, wenn ich NSLog(@"Selected objects: %@", [arrayController selectedObjects]) manuell aufrufe, erhalte ich Folgendes
Das Ergebnis sieht immer folgendermaßen aus
ENDE UPDATE
2011-07-05 20:44:45.711 collectionView2[2153:903] Selected objects 1: (
"<Hormiga: 0x10013e330>"
)
Ich glaube, ich habe etwas falsch gemacht Bindung NSArrayController mit NSCollectionView. Was könnte mein Fehler sein? Sagen Sie mir, wenn Sie mehr Informationen möchten, ich kann sogar das gesamte Programm in einem Zip posten, wenn Sie es benötigen.
UPDATE 2
Dies ist der Code, den ich in meinem Controller verwende, um den arrayController "selectionIndexes" Schlüssel zu beobachten.
[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];
UPDATE 3
Eines der Probleme wurde behoben, ich habe vergessen, die Bindung zwischen NSArrayController und NSCollectionView relativ zu dem Schlüssel "selectionIndexes" zu setzen. Jetzt kann ich manuell die Liste der selectedObject abrufen und es ist korrekt!
Mein letztes Problem ist, dass ich die Benachrichtigung nicht erhalte, wenn selectionIndexes sich ändert. So observeValueForKeyPath:ofObject:change:context: nie aufgerufen werden!
UPDATE 4
Ich habe versucht, den Beobachter in der init-Methode meines Controllers zu setzen, aber auf diese Weise ist der arrayController immer noch null. Verschieben der addObserver in der awakeForNib behoben alle meine Probleme!