按字母顺序排序NSArray

时间:2013-10-12 18:54:03

标签: objective-c sorting nsmutablearray

我正在努力获取按艺术家排序的歌曲列表。我的代码工作正常,可以打印歌曲和艺术家。现在我想按艺术家对列表进行排序和打印。这是我第一次尝试排序,我知道我必须在这里找到一些简单的东西。我得到 - 期待')' - 和 - 使用未声明的标识符'listSongs' - 这都在我的@implementation文件中。

感谢您的任何帮助。

这是我的界面部分

@interface Library : NSObject

@property (nonatomic, strong) NSMutableArray *list;

-(id) initList;

-(void) addSong: (Song *) song;

-(void) listSongs;

@end

这是我的实施部分

#import "Library.h"

@implementation Library

@synthesize list;

-(id) initList
{
    self = [super init];
    if (self){
        list = [NSMutableArray array];
    }
    return self;
 }

-(id) init
{
    return [self initList];
}


-(void) addSong:(Song *)song

{
    [list addObject: song];
}

-(void) listSongs

{
    NSLog(@"The list of my songs");

    NSSortDescriptor *sorter;

    sorter = [[[NSSortDescriptor alloc] initWithKey:@"artist" ascending: YES]

          NSArray *sortDescriptors = [NSArray arrayWithObjects:sorter]; **// ** Expected ')'**

          [listSongs sortUsingDescriptors:sortDescriptors]; //**use of undeclared identifier 'listSongs'

    for (Song *song in list)
        NSLog(@"%-20s by %s", [song.Title UTF8String], [song.Artist UTF8String]);
}

2 个答案:

答案 0 :(得分:1)

你应该使用NSArray * sortedArray = [listSongs arraySortedUsingDescriptors:sortDescriptors];

基本上这个方法返回一个有序数组,它在一个未排序的数组上调用,并给出一个排序描述符数组。

答案 1 :(得分:0)

正如我从您的代码中理解的那样,您要做的是对list进行排序,并将其声明为属性。

您需要替换此行

[listSongs sortUsingDescriptors:sortDescriptors];

使用

self.list = [self.list sortUsingDescriptors:sortDescriptors];