Сортировать NSArray по алфавиту

Я работаю над составлением списка песен для сортировки по исполнителям. У меня работает код, и я могу распечатать песни и исполнителей. Теперь я хочу отсортировать и распечатать список по исполнителю. Это моя первая попытка сортировки, и я знаю, что здесь мне не хватает чего-то простого. Я получаю -- Ожидается ')'-- и -- использование необъявленного идентификатора '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]);
}

person Luis Ramos    schedule 12.10.2013    source источник
comment
Где вы объявляете listSongs?   -  person Fogmeister    schedule 12.10.2013
comment
Я думал, что объявляю это прямо выше. Судя по вашему вопросу a=, я предполагаю, что это не так, поэтому мне нужно разобраться с этим сейчас. Если вы не можете сказать, что я очень новичок в этом и все еще пытаюсь выяснить условия во время работы. Спасибо!   -  person Luis Ramos    schedule 12.10.2013
comment
Я объявил это в файле .h. Добавил сейчас в пост.   -  person Luis Ramos    schedule 12.10.2013
comment
Вы объявили метод. Не NSArray.   -  person Fogmeister    schedule 12.10.2013


Ответы (2)


Вы должны использовать NSArray *sortedArray = [listSongs arraySortedUsingDescriptors:sortDescriptors];

По сути, этот метод возвращает отсортированный массив, он вызывается для несортированного массива и получает массив дескрипторов сортировки.

person William Falcon    schedule 12.10.2013
comment
Итак, мне нужно установить отдельный массив для хранения отсортированных данных. Я понимаю. Большое Вам спасибо. - person Luis Ramos; 12.10.2013
comment
Если этот ответ решил вашу проблему, вы должны принять его, чтобы люди знали, какой ответ вы выбрали. - person William Falcon; 12.10.2013

Как я понимаю из вашего кода, вы пытаетесь отсортировать list, объявленное свойство.

Вам нужно заменить эту строку

[listSongs sortUsingDescriptors:sortDescriptors];

С участием

self.list = [self.list sortUsingDescriptors:sortDescriptors];
person Hesham    schedule 12.10.2013