Another -[NSOutlineView autosaveExpandedItems] bug
Another -[NSOutlineView autosaveExpandedItems] bug
- Subject: Another -[NSOutlineView autosaveExpandedItems] bug
- From: Bill Cheeseman <email@hidden>
- Date: Fri, 18 Jul 2014 14:19:12 -0400
I have found and reported another bug in the -[NSOutlineView autosaveExpandedItems] mechanism. Here is a brief summary of my bug report #17728176:
Summary:
In NSOutlineView, setting autosaveExpandedItems to YES is supposed to cause the outline to remember the expanded/collapsed state of its rows across application launches. The documentation points out that it does this only if you implement the -persistentObjectForItem: and -itemForPersistentObject: NSOutlineViewDataSource methods. This mostly works correctly, but there is one case where expanding or collapsing rows fails to call -persistentObjectForItem: and throws the autosaveExpandedItems mechanism into an inconsistent state.
Specifically, the NSOutlineView reference document says the following with respect to the item parameter of -[NSOutlineView expandItems:expandChildren:]: "Starting in OS X version 10.5, passing 'nil' will expand each item under the root in the outline view." It does expand each item as stated, but it does NOT call the -persistentObjectForItem: datasource method, and as a result the expanded state of all rows is not reinstated after quit and relaunch.
The only way to get an "expand all" button or menu item to persist across relaunches is to expand each item individually in a loop, something like this::
- (IBAction)expandAllRows:(id)sender {
AWRSourceListOutlineView *outlineView = [self sourceListOutlineView];
NSIndexSet *topLevelItemIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[self sourceListContents] count] - 1)];
[topLevelItemIndexes enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger itemIndex, BOOL *stop) {
[outlineView expandItem:[[self sourceListContents] objectAtIndex:itemIndex] expandChildren:YES];
}];
// This alternative does not trigger the -[NSOutlineViewDataSource persistentObjectForItem:] datasource method; bug in OS X 10.9.4 Mavericks.
// [[self sourceListOutlineView] expandItem:nil expandChildren:YES];
}
--
Bill Cheeseman - email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden