我该如何修复此代码?

时间:2010-10-04 02:22:52

标签: objective-c cocoa-touch sorting nsmutablearray nssortdescriptor

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

Person
-------
name
phone

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

这是我试过的代码。

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

它不起作用。如何改变工作?

1 个答案:

答案 0 :(得分:3)

你知道sortedArrayUsingDescriptors:返回一个新的(已排序的)数组,对吗?如果要对数组进行就地排序,则需要确保personArrayNSMutableArray并使用其sortUsingDescriptors:方法。

修改

或许看一下这两种方法会更有益:

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

第一个以形容词和名词开头。形容词描述了名词。名词表示它是返回值。由于名词是“数组”,因此方法的返回值为NSArray是有意义的。由于形容词是“排序的”,因此我们可以假设返回的数组将以某种顺序排列(顺序由“使用”“描述符”指定)。

第二个以动词开头。由于动词是动词,我们可以推断这实际上是一种修改接收器本身的行为方法。由于动词是“排序”,因此我们可以假设接收器在方法完成后将处于某种顺序。

遵循此模式的其他“方法对”:

  • -[NSString stringByAppendingString:]-[NSMutableString appendString:]
  • -[NSArray filteredArrayUsingPredicate:]-[NSMutableArray filterUsingPredicate:]
  • -[NSCharacterSet invertedSet]-[NSMutableCharacterSet invert]
  • ......和其他许多人

由于您使用的是第一种方法(sortedArrayUsingDescriptors:),因此必须检索方法的返回值;否则你无所事事地完成所有这些工作。如果你想要“就地”对数组进行排序(即,直接修改接收器而给予新的NSArray),那么personArray 必须NSMutableArray必须使用sortUsingDescriptors:方法。