您知道sortedArrayUsingDescriptors:
返回一个新的(排序的)数组,对吗?如果要对数组进行就地排序,则需要确保它personArray
是一个NSMutableArray
并使用它的sortUsingDescriptors:
方法。
编辑
也许看看这两种方法会更有益:
-[NSArray sortedArrayUsingDescriptors:];
-[NSMutableArray sortUsingDescriptors:];
第一个以形容词和名词开头。形容词描述名词。名词表示它是返回值。由于名词是“数组”,因此该方法的返回值是一个NSArray
. 由于形容词是“排序的”,因此我们可以假设返回的数组将按某种顺序排列(顺序由“使用”“描述符”指定)。
第二个以动词开头。由于动词是一个动作词,我们可以推断这实际上是一种行为方法,它将修改接收者本身。由于动词是“排序”,因此我们可以假设接收者将在方法完成后按某种顺序排列。
遵循此模式的其他“方法对”:
-[NSString stringByAppendingString:]
和-[NSMutableString appendString:]
-[NSArray filteredArrayUsingPredicate:]
和-[NSMutableArray filterUsingPredicate:]
-[NSCharacterSet invertedSet]
和-[NSMutableCharacterSet invert]
- ...和许多其他人
由于您使用的是第一种方法 ( sortedArrayUsingDescriptors:
),因此您必须检索该方法的返回值;否则你做所有这些工作都是徒劳的。如果你想“就地”对数组进行排序(即直接修改接收者而不是新的NSArray
),那么personArray
必须是一个NSMutableArray
,并且你必须使用sortUsingDescriptors:
方法。