Hallo,
ich habe bei einem Testprojekt ein Problem mit 'nem NSOutlineView bzw. mit dem TreeController. Ich möchte über einen Button die GroupItems aus bzw. einblenden lassen. Dafür habe ich folgende Action geschrieben, welche auch bis auf die Selection funktioniert:
Alles anzeigen
Das seltsame daran ist, dass die beiden letzten Zeilen expandItem und selectionIndexPath keine Wirkung zeigen. Es wird grundsätzlich das erste Element im NSOutlineView markiert.
Ich habe dann testweise eine 2. Action geschrieben, mit welcher ich die beiden besagten Code Zeilen direkt nach der ersten Action ausführe: (Durch nen Button klick)
Das interessante ist, dass jetzt das gewünschte Verhalten auftritt obwohl die Aufrufe identisch sind. (tempSelectedObject zeigt immer noch auf dasselbe Objekt)
Edit: Der einzige Unterschied zwischen den beiden Aufruf-Versuchen ist das Objekt , welches von _treeNodeForItem zurückgegeben wird. Allerdings verweisen die unterschiedlichen NSTreeNode Objekte bei -representedObject beide auf das selbe NSManagedObject. Das wird aber wahrscheinlich auch nicht der Fehler sein, denn das expandItem wird ja auch nicht ausgeführt.
Alles anzeigen
ich habe bei einem Testprojekt ein Problem mit 'nem NSOutlineView bzw. mit dem TreeController. Ich möchte über einen Button die GroupItems aus bzw. einblenden lassen. Dafür habe ich folgende Action geschrieben, welche auch bis auf die Selection funktioniert:
PHP-Quellcode
- - (IBAction)_changeGroupBannerState:(id)sender {
- self.tempSelectedObject = [self selectedObject];
- NSPredicate *predicate = @"Das fetchen funktioniert, deshalb lass ich den Code der einfachhalt halber mal raus";
- [sourceTreeController setFetchPredicate:predicate];
- [sourceTreeController fetch:sender];
- [sourceViewOutlineView expandItem:nil expandChildren:YES];
- //_treeNodeForItem besorgt mir das passende NSTreeNode* Objekt für das jeweilige NSManagedObject*
- [sourceTreeController setSelectionIndexPath:[[self _treeNodeForItem:self.tempSelectedObject] indexPath]];
- }
Ich habe dann testweise eine 2. Action geschrieben, mit welcher ich die beiden besagten Code Zeilen direkt nach der ersten Action ausführe: (Durch nen Button klick)
Edit: Der einzige Unterschied zwischen den beiden Aufruf-Versuchen ist das Objekt , welches von _treeNodeForItem zurückgegeben wird. Allerdings verweisen die unterschiedlichen NSTreeNode Objekte bei -representedObject beide auf das selbe NSManagedObject. Das wird aber wahrscheinlich auch nicht der Fehler sein, denn das expandItem wird ja auch nicht ausgeführt.
PHP-Quellcode
- - (NSTreeNode *)_treeNodeForItem:(NSManagedObject *)item {
- if(!item)
- return nil;
- NSInteger rows = [sourceViewOutlineView numberOfRows];
- NSInteger i;
- for(i = 0; i < rows; ++i) {
- NSTreeNode *treeNode = [sourceViewOutlineView itemAtRow:i];
- if([treeNode representedObject] == item)
- return treeNode;
- }
- return nil;
- }