Reputation: 3583
I have a NSArrayController and a NSTableView. They show tracks from iTunes. I can sort the list by clicking in the header.
Is there a way to set up a default sort descriptor for the table view so it sorts for albums every time the user launches the app?
I tried to set the sortDescriptor on the array controller and the table view but that changes nothing.
Thank you
Edit: The answer is right. But it needs a NSArray:
- (NSArray *)mainSortDescriptor {
return [NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"album" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"trackNumber" ascending:YES],
nil];
}
Upvotes: 15
Views: 6196
Reputation: 64022
If you want to bind the array controller's sort descriptor, you have to bind it to something. You can put this in your application delegate, for example:
- (NSArray *)tracksSortDescriptors {
return [NSArray arrayWithObject:
[NSSortDescriptor sortDescriptorWithKey:@"albumName"
ascending:YES]];
}
Then you can set up the binding in IB as
Bind to: MyAppDelegate Model Key Path: tracksSortDescriptors
EDITED. I forgot, when translating this from PyObjC, that I was returning a list. Oops.
Upvotes: 13
Reputation: 33146
I tried this, didn't quite work - resorted on each app start, but not while the app was running.
Eventually, I noticed that in my NSArrayController object, the following box was unticked (argh!):
"Auto rearrange content"
...so, FYI to anyone who has the same problem: make sure that box is ON :)
Upvotes: 5