0

我正在尝试对一组人员对象进行排序。类看起来像这样。

Person
-------
name
phone

我有一个用这些对象填充的 NSMutableArray。我想按每个人对象的名称对这个数组进行排序。

这是我尝试过的代码。

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

它不起作用。怎么改才能工作?

4

1 回答 1

3

您知道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:方法。

于 2010-10-04T02:27:16.060 回答