Sorting a NSArrayController backed NSTableView
Asked Answered
P

2

15

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];

}

Parallelepiped answered 29/3, 2011 at 20:12 Comment(0)
T
13

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.

Tauto answered 1/4, 2011 at 8:12 Comment(3)
Thats right. I tried something similar but it didn't work. Now it works. ThanksParallelepiped
@Josh Caswell I get the following error: [<NSViewController 0x100147980> valueForUndefinedKey:]: this class is not key value coding-compliant for the key tracksSortDescriptors. Any ideas?Plumbery
@DomVinyard You've bound to the view controller instead of app delegate. No problem, simply implement the method tracksSortDescriptors in your view controller instead.Wright
S
5

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 :)

Sidwell answered 9/6, 2011 at 17:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.