How should I fix this code?

百般思念 提交于 2019-12-12 05:36:59

问题


I'm trying to sort an array of people objects. The class looks like this.

Person
-------
name
phone

I have an NSMutableArray filled with these objects. I want to sort this array by the name of each person object.

This is the code I tried.

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

It doesn't work. How can it be changed to work?


回答1:


You're aware that sortedArrayUsingDescriptors: returns a new (sorted) array, correct? If you want to sort the array in-place, then you need to make sure that personArray is an NSMutableArray and use its sortUsingDescriptors: method.

edit

Perhaps taking a look at the two methods will be more beneficial:

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

The first one starts with an adjective and a noun. The adjective describes the noun. The noun indicates that it is the return value. Since the noun is "array", it would make sense that the return value of the method is an NSArray. Since the adjective is "sorted", we can therefore assume that the returned array will be in some sort of order (the order being specified by the "using" the "descriptors").

The second one starts with a verb. Since a verb is an action word, we can deduce that this is actually a behavioral method that will modify the receiver itself. Since the verb is "sort", we can therefore assume that the receiver will be in some sort of order after the method has completed.

Other "method pairs" that follow this pattern:

  • -[NSString stringByAppendingString:] and -[NSMutableString appendString:]
  • -[NSArray filteredArrayUsingPredicate:] and -[NSMutableArray filterUsingPredicate:]
  • -[NSCharacterSet invertedSet] and -[NSMutableCharacterSet invert]
  • ...and many others

Since you're using the first method (sortedArrayUsingDescriptors:), you must retrieve the return value of the method; otherwise you're doing all this work for nothing. If you want to sort the array "in place" (ie, modify the receiver directly and not be given a new NSArray), then personArray must be an NSMutableArray, and you must use the sortUsingDescriptors: method.



来源:https://stackoverflow.com/questions/3852464/how-should-i-fix-this-code

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!