sortedArrayUsingSelector на пользовательских классах? - PullRequest
2 голосов
/ 02 июня 2011

У меня есть NSMutableArray, в котором есть пользовательские объекты.У каждого объекта есть атрибут name.Есть ли способ как-то использовать

[myArray    sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]

в названии?Например,

[myArray.name sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]

Или мне лучше написать функцию сортировки для моего пользовательского класса для сортировки по имени?Спасибо.

Ответы [ 3 ]

11 голосов
/ 02 июня 2011

В этом случае вам нужно использовать NSSortDescriptor.

NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray* sortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
4 голосов
/ 02 июня 2011

Есть несколько способов добиться этого, один из них состоит в том, чтобы определить свой собственный метод сравнения, как предлагали другие, но если это просто разовая вещь, вы также можете использовать новый NSComparator API для использования блока для сортировки:

NSArray *sortedArray = [array sortedArrayUsingComparator:^(id obj1, id obj2) {
    return [[(MyClass *)obj1 name] caseInsensitiveCompare:[(MyClass *)obj2 name]];
}];
0 голосов
/ 02 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...