2016-04-11 45 views
0

我有一個自定義對象數組,我從服務器獲取。NSSortDescriptor以隨機格式排序數據

我想根據成本對數據進行排序。他們是我陣列中的一個totalCost字段,其​​類型爲NSString

現在我使用NSSortDescriptor這樣的:

NSSortDescriptor *sortDescriptrCost; 
     sortDescriptrCost = [[NSSortDescriptor alloc] initWithKey:@"totalCost" 
                 ascending:YES]; 

    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptrCost,nil]; 
     NSArray *sortedArray = [unchnagedOriginalData sortedArrayUsingDescriptors:sortDescriptors]; 

現在,當成本超過100則排序好。但是,當數據包含costless than 100排序breaks.Here是輸出:

這是排定的順序我得到:

113--totalCost 
113--totalCost 
120--totalCost 
149--totalCost 
182--totalCost 
255--totalCost 
259--totalCost 
263--totalCost 
263--totalCost 
67--totalCost 
80--totalCost 
+2

,因爲它的一個字符串,它將按ascii值而不是數值排序。 – hola

+2

不要將字符串排序,就好像它們是數字一樣。 「8」>「6」>「1」,這就是爲什麼67之後,其次是80。 – Avi

+2

你的總成本看起來像它的一個字符串..所以試試看。改變你的鍵值爲「totalCost.intValue」或「totalCost.integerValue」 –

回答

1
NSArray *sortedArray; 
sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
    if ([a valueForKey:@"totalCost"] && [b valueForKey:@"totalCost"])  { 
     // Compare object values and return as per your expectations 
    } 
}]; 

這可能會幫助你肯定的