2012-05-18 27 views
0

我要訂購NSMutableArray包含對象根據兩個對象屬性其中之一有double類型第二個有NSString按照double值排序NSmutable數組包含對象

我試圖用這個方法,但我得到異常:

NSString * LASTNAME = @"lastName"; 
NSString * GRADE = @"grade"; 

NSSortDescriptor *lastDescriptor = 
    [[NSSortDescriptor alloc] 
     initWithKey:LASTNAME 
      ascending:YES 
      selector:@selector(localizedCaseInsensitiveCompare:)]; 

NSSortDescriptor *firstDescriptor = 
    [[NSSortDescriptor alloc] 
     initWithKey:GRADE 
      ascending:YES 
      selector:@selector(localizedCaseInsensitiveCompare:)]]; 

NSArray * descriptors = 
    [NSArray arrayWithObjects:lastDescriptor, firstDescriptor, nil]; 
NSArray * sortedArray = 
    [students sortedArrayUsingDescriptors:descriptors]; 

@interface Student : NSObject 
{ 
    NSString * firstName; 
    NSString * lastName; 
    double grade; 
} 

回答

1

數字沒有的情況下,可以嘗試使用比較:甲級

編輯後:你沒有說什麼錯誤你得到了。你發佈的代碼甚至編譯了嗎?你在第一個描述符中有一個錯字 - 在方法結尾處有一個太多的「]」。當你拿出比較的時候,你可能會修正這個問題:(這不應該解決任何問題)。

1

NSNumber不響應localizedCaseInsensitiveCompare:。你只需要簡單的compare:的號碼。

+0

我應該做高檔的NSNumber代替雙我想比較,但我又站了異常? – kartal

+0

@salamonti:鍵值編碼將返回一個雙倍的NSNumber,所以這不成問題。你得到的確切例外是什麼? – Chuck

+0

你是對的,我通過刪除比較解決它,所以它將是 NSSortDescriptor * firstDescriptor = [[NSSortDescriptor alloc] initWithKey:GRADE 遞增:YES]]; – kartal

0

刪除localizedCaseInsensitiveCompare

NSSortDescriptor *firstDescriptor = 
    [[NSSortDescriptor alloc] 
     initWithKey:GRADE 
      ascending:YES]]; 
+0

這段代碼不會編譯 - 再一次,最後有一個額外的「]」。 – rdelmar

相關問題