0

我正在努力获取按艺术家排序的歌曲列表。我的代码正常工作,可以打印歌曲和艺术家。现在我想让它按艺术家排序和打印列表。这是我第一次尝试排序,我知道我必须在这里遗漏一些简单的东西。我得到 -- 预期的 ')' -- 和 -- 使用未声明的标识符 '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]);
}
4

2 回答 2

1

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

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

于 2013-10-12T18:56:56.323 回答
0

正如我从您的代码中了解到的那样,您要做的是对list声明的属性进行排序。

您需要替换此行

[listSongs sortUsingDescriptors:sortDescriptors];

self.list = [self.list sortUsingDescriptors:sortDescriptors];
于 2013-10-12T19:03:43.273 回答