2013-10-12 135 views
0

我正在努力獲取歌曲列表,按藝術家排序。我有我的代碼工作,並可以打印歌曲和藝術家。現在我想讓它按照藝術家排序和打印清單。這是我第一次嘗試排序,我知道我必須在這裏錯過簡單的東西。我得到 - 預期的')' - ' - 使用未聲明的標識符'listSongs' - 這些都在我的@implementation文件中。按字母順序排列NSArray

任何幫助表示讚賞先謝謝你。

這裏是我的接口部分

@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]); 
} 
+0

你在哪裏聲明listSongs? – Fogmeister

+0

我以爲我在上面宣佈它。我假設你是一個問題,我不是那麼需要現在去看看。如果你不能說我對此很新,但仍然試圖在工作時弄清楚這些術語。謝謝! –

+0

我在.h文件中聲明瞭它。我現在把它添加到了帖子中。 –

回答

1

您應該使用的NSArray * sortedArray = [listSongs arraySortedUsingDescriptors:sortDescriptors]。

基本上這個方法返回一個排序後的數組,它在一個未排序的數組上被調用,並被賦予一個排序描述符數組。

+0

好吧,我需要設置一個單獨的數組來「保存」排序的數據。我知道了。非常感謝你。 –

+0

如果這個答案解決了你的問題,你應該接受它,所以人們知道你用 –

+0

去了哪個答案,再次感謝你。 –

0

正如我從你的代碼瞭解到,你要做的是將list這是聲明屬性。

您需要替換該行

[listSongs sortUsingDescriptors:sortDescriptors]; 

隨着

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

現在它告訴我,sortDescriptors未聲明? –