Как мне исправить этот код? - PullRequest
0 голосов
/ 04 октября 2010

Я пытаюсь отсортировать массив объектов людей.Класс выглядит следующим образом.

Person
-------
name
phone

У меня есть NSMutableArray, заполненный этими объектами.Я хочу отсортировать этот массив по имени каждого объекта person.

Это код, который я пробовал.

NSSortDescriptor  *desc = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES];
[personArray sortedArrayUsingDescriptors: [NSMutableArray arrayWithObject: desc]];

Это не работает.Как это можно изменить на работу?

1 Ответ

3 голосов
/ 04 октября 2010

Вы знаете, что sortedArrayUsingDescriptors: возвращает новый (отсортированный) массив, правильно?Если вы хотите отсортировать массив на месте, вам нужно убедиться, что personArray является NSMutableArray, и использовать его метод sortUsingDescriptors:.

edit

Возможно, более полезно взглянуть на два метода:

-[NSArray sortedArrayUsingDescriptors:];
-[NSMutableArray sortUsingDescriptors:];

Первый начинается с прилагательного и существительного.Прилагательное описывает существительное.Существительное указывает, что это возвращаемое значение.Так как существительное является «массивом», имело бы смысл, чтобы возвращаемое значение метода было NSArray.Поскольку прилагательное «отсортировано», мы можем предположить, что возвращаемый массив будет в некотором порядке (порядок определяется «использованием» дескрипторов).

Второй начинается сглагол.Поскольку глагол является словом действия, мы можем сделать вывод, что это на самом деле поведенческий метод, который изменит самого получателя.Поскольку глагол «сортировать», мы можем предположить, что получатель будет в некотором порядке после завершения метода.

Другие «пары методов», которые следуют этой схеме:

  • -[NSString stringByAppendingString:] и -[NSMutableString appendString:]
  • -[NSArray filteredArrayUsingPredicate:] и -[NSMutableArray filterUsingPredicate:]
  • -[NSCharacterSet invertedSet] и -[NSMutableCharacterSet invert]
  • ... и многие другие

Поскольку вы используете первый метод (sortedArrayUsingDescriptors:), вы должны получить возвращаемое значение метода;в противном случае вы делаете всю эту работу даром.Если вы хотите отсортировать массив «на месте» (т. Е. Изменить получателя напрямую, а , а не получить новый NSArray), тогда personArray должно быть NSMutableArray и вы должны использовать метод sortUsingDescriptors:.

...