2013-05-15 79 views
0

我想排序我的數組,但它似乎無法可靠地工作。SortedArrayUsingComparator not working accurate

這裏是排序的代碼。基本請求priorityID具有從1-5 值例如: enter image description here

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
      NSLog(@"Value A: %@", [NSNumber numberWithInteger:[(Request*)a priorityID]]); 
      NSLog(@"Value B %@", [NSNumber numberWithInteger:[(Request*)b priorityID]]); 
      NSNumber *first = [NSNumber numberWithInt:[(Request*)a priorityID]]; 
      NSNumber *second = [NSNumber numberWithInt:[(Request*)b priorityID]]; 
      return [first compare:second]; 
     }]; 

     self.sortedReqArray = [NSMutableArray arrayWithArray:sortedArray]; 

有時它的正確排序1-5,但有時排序1 2 4 5 3 ...

然後,當我去看一下NSLog,當它們應該是1-5時,它就會吐出很大的價值。

下面是示例輸出 Value B 168492640 Value A: 168492640 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912

這是怎麼回事?謝謝!

回答

3

從調試器顯示[(Request*)a priorityID]似乎是一個NSNumber,但 你是把它當作整數(所以你實際上是比較地址對象)。

這下面應該工作:寫這篇

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
      NSNumber *first = [(Request*)a priorityID]; 
      NSNumber *second = [(Request*)b priorityID]; 
      return [first compare:second]; 
     }]; 

一個或許稍微更優雅的方式是

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(Request* a, Request* b) { 
      NSNumber *first = [a priorityID]; 
      NSNumber *second = [b priorityID]; 
      return [first compare:second]; 
     }]; 

如果Request類是鍵 - 值編碼兼容的關鍵priorityID,該 以下也應該工作:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"priorityID" ascending:YES]; 
sortedArray = [self.selectedReqArray sortedArrayUsingDescriptors:@[sort]]; 
+0

喲你是炸彈!是的,解決了這個問題,我修改它的優雅版本。非常感謝! – Alan