Вы знаете, что 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:
.