I'm currently trying to teach myself Objective-C and was playing around with an exercise where I needed to sort an array.
I managed to complete it using the following code:
NSSortDescriptor * newSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE];
NSArray *sortDescriptors = [NSArray arrayWithObject:newSortDescriptor];
[self.theBookStore sortUsingDescriptors:sortDescriptors];
My question is about what is actually happening here. I don't really understand exactly what I've done.
Line 1: I understand here I've created a new object that has a descriptor. This has two parameters, the column I want to sort on and that it is ascending.
Line 2: This is the line I'm confused about. Why do I need an array of sort descriptors? When I read this code I suspect it creates an array with only one row is that correct?
Line 3: I understand that this is calling the sortUsingDescriptors method but again, my confusion is why this function expects an array.
I've read the documentation but I'm really looking for a simple explanation.
Any help is much appreciated
Line 1: I understand here I've created a new object that has a descriptor. This has two parameters, the column I want to sort on and that it is ascending.
Really, you've created an object that is a descriptor. It describes how to sort the array.
Line 2: This is the line I'm confused about. Why do I need an array of sort descriptors? When I read this code I suspect it creates an array with only one row is that correct?
Right -- you've created an array that contains a single object. You could create an array that has ten or fifteen or eighty-seven sort descriptors, if you really wanted to sort on that many fields. More often, you use one, two, maybe three. So, if you're sorting a list of people, you might add sort descriptors that specify last name and first name. That way, people that have the same last name will be arranged within that group according to their first name.
Line 3: I understand that this is calling the sortUsingDescriptors method but again, my confusion is why this function expects an array.
Again, it's so that you can have primary, secondary, tertiary (etc.) sort keys. You could have a separate method that takes a single sort descriptor instead of an array for those times when you want to sort on only one key. NSArray doesn't provide that, but you can always add it in a category if you want:
@category NSArray (SingleSortDescriptor)
- (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor;
@end
@implementation NSArray (SingleSortDescriptor)
- (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor
{
return [self sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
}
@end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With