7

I have a custom object like:

#import <Foundation/Foundation.h>

@interface Store : NSObject{
    NSString *name;
    NSString *address;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *address;

@end

I have an array of NSMutableArray (storeArray) containing Store objects:

store1 = [[Store alloc] init];
store1.name = @"Walmart";    
store1.address = @"walmart address here..";

store2 = [[Store alloc] init];
store2.name = @"Target";
store2.address = @"Target address here..";

store3 = [[Store alloc] init];
store3.name = @"Apple Store";
store3.address = @"Apple store address here..";

//add stores to array
storeArray = [[NSMutableArray alloc] init];
[storeArray addObject:store1];
[storeArray addObject:store2];
[storeArray addObject:store3];

My question is how can I sort the array by the store name? I know I can sort an array alphabetically by using this line:

[nameOfArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

How can I apply this to the store name of my Store class?

2 Answers 2

28
NSSortDescriptor *sortDescriptor =
    [NSSortDescriptor sortDescriptorWithKey:@"name"
                                  ascending:YES
                                   selector:@selector(caseInsensitiveCompare:)];
[nameOfArray sortedArrayUsingDescriptors:@[sortDescriptor]];

Related documentation:

Sign up to request clarification or add additional context in comments.

Comments

10

Regexident's answer is based on NSArrays, the corresponding in-place sorting for NSMutableArray would be -sortUsingDescriptors:

[storeArray sortUsingDescriptors:
                    [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" 
                                                                           ascending:YES 
                                                                            selector:@selector(caseInsensitiveCompare:)]]];

Now storeArray it-self will be sorted.

3 Comments

Thanks man. It's weird that they have 2 methods with different results
what do u mean? One is for in-place sorting, one creates a new array. Both versions have their own use cases.
Thank you so much...most of answers shows how to sort NSArrays even though it is asked for NSMutableArray array. This worked like a charm :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.