Ich versuche momentan eine Liste von Einträgen mit Untereinträgen in einem NSOutlineView anzuzeigen, was auch funktioniert, und regelmässig zu aktualisieren.
Und bei der Aktualisierung hab ich das Problem, dass sich die Auswahl unter unter Umständen ändert. Es bleiben immer die Zeilen ausgewählt, auch wenn der Eintrag seine Position ändert. (z.B. wenn ein Eintrag hinzukommt oder entfernt wird)
Nun bin ich auf die naheliegende Idee gekommen, die ausgewählten Objekte in outlineViewSelectionDidChange in ein Array zu schreiben und nach dem aktualisieren wieder zu selektieren, funktioniert ebenfalls.
Allerdings kommt es teilweise vor, wenn ich während der Aktualisierung Einträge auf- oder zuklappe, dass es zu einem Exception kommt (nicht immer der gleiche).
Die Aktualisierung wird in einem gesonderten Thread durchgeführt. Die Wiederherstellung der Selektion hatte einmal im gleichen und auch schon testweise im Main-Thread.
Das ist der Code zum wiederherstellen der Selektion:
Alles anzeigen
Und da ich mit meinem Latein am Ende bin, meine Frage: Wie ist es möglich die Auswahl beizubehalten, wenn sich der Inhalt der Liste ändert, ohne dass es zu Exceptions kommt?
Und bei der Aktualisierung hab ich das Problem, dass sich die Auswahl unter unter Umständen ändert. Es bleiben immer die Zeilen ausgewählt, auch wenn der Eintrag seine Position ändert. (z.B. wenn ein Eintrag hinzukommt oder entfernt wird)
Nun bin ich auf die naheliegende Idee gekommen, die ausgewählten Objekte in outlineViewSelectionDidChange in ein Array zu schreiben und nach dem aktualisieren wieder zu selektieren, funktioniert ebenfalls.
Allerdings kommt es teilweise vor, wenn ich während der Aktualisierung Einträge auf- oder zuklappe, dass es zu einem Exception kommt (nicht immer der gleiche).
Die Aktualisierung wird in einem gesonderten Thread durchgeführt. Die Wiederherstellung der Selektion hatte einmal im gleichen und auch schon testweise im Main-Thread.
Das ist der Code zum wiederherstellen der Selektion:
Quellcode
- - (void)restoreSelection {
- if (selectedKeys && !isRestoring) {
- isRestoring = YES;
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSMutableIndexSet *selRowIndexes = [NSMutableIndexSet indexSet];
- for (id item in selectedKeys) {
- [selRowIndexes addIndex:[myOutlineView rowForItem:item]];
- }
- [myOutlineView selectRowIndexes:selRowIndexes byExtendingSelection:NO];
- [pool drain];
- isRestoring = NO;
- }
- }
Und da ich mit meinem Latein am Ende bin, meine Frage: Wie ist es möglich die Auswahl beizubehalten, wenn sich der Inhalt der Liste ändert, ohne dass es zu Exceptions kommt?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von RJZ ()