2013-05-15 3 views
0

Я пытаюсь сортировать свой массив, но, похоже, он не работает надежно.SortedArrayUsingComparator не работает точно

Вот код для сортировки. В основном Запрос 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 класс Key-Value Coding совместимый для ключа priorityID, то следующие должны также работать:

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

лет u - это бомба! да, это решило проблему, и я изменил ее до элегантной версии. Большое спасибо! – Alan

Смежные вопросы