2012-06-04 19 views
6

Przeanalizowałem już kilka odpowiedzi za pomocą różnych metod sortowania NSMutableArray, ale z jakiegoś powodu nie działają one dla mnie.Sortowanie tablic zmiennych za pomocą klucza słownika

Po prostu próbuję posortować tablicę zmiennych, która zawiera słowniki za pomocą klucza Delay w każdym słowniku. Jednak "posortowana" tablica jest dokładnie taka sama jak oryginalna tablica.

Nawiasem mówiąc, działa dobrze, jeśli utworzę atrapę tablicy zmiennych i zapełnię ją słownikami zawierającymi liczby, ale z jakiegoś powodu nie posortuje tej tablicy zmiennych, którą inicjuję.

Co robię źle?

Oto mój kod:

playlistCalls = [[NSMutableArray alloc] initWithArray:[currentPlaylist objectForKey:@"Tunes"]]; 

NSLog(@"original %@", playlistCalls); 

NSSortDescriptor *delay = [NSSortDescriptor sortDescriptorWithKey:@"Delay" ascending:YES]; 
[playlistCalls sortUsingDescriptors:[NSArray arrayWithObject:delay]]; 

NSLog(@"sorted %@", playlistCalls); 

Oto tablica zawierająca słowniki:

2012-06-04 15:48:09.129 MyApp[57043:f503] original (
     { 
     Name = Test Tune; 
     Delay = 120; 
     Volume = 100; 
    }, 
     { 
     Name = Testes; 
     Delay = 180; 
     Volume = 100; 
    }, 
     { 
     Name = Testing; 
     Delay = 60; 
     Volume = 100; 
    } 
) 

2012-06-04 15:48:09.129 MyApp[57043:f503] sorted (
     { 
     Name = Test Tune; 
     Delay = 120; 
     Volume = 100; 
    }, 
     { 
     Name = Testes; 
     Delay = 180; 
     Volume = 100; 
    }, 
     { 
     Name = Testing; 
     Delay = 60; 
     Volume = 100; 
    } 
) 

Odpowiedz

8

Powyższy kod jest w porządku kiedy używam NSNumber s w moim słowniku. To prowadzi mnie do przekonania, że ​​wartość Delay jest przechowywana jako ciągi w słowniku. To, co musisz zrobić, to posortować według ciągów integerValue.

NSSortDescriptor *delay = 
    [NSSortDescriptor sortDescriptorWithKey:@"Delay.integerValue" ascending:YES]; 
+0

Dobrze, że jesteś ... To wystarczyło. Muszę wrócić i to naprawić. Dzięki! – ZeNewb

1

spróbuj wykonać następujące czynności, pracował ze mną

NSDictionary *dic; 
NSMutableArray *arr = [[NSMutableArray alloc] init]; 

dic = [NSDictionary dictionaryWithObjectsAndKeys: 
     [NSNumber numberWithInt:120], @"Delay", 
     [NSNumber numberWithInt:100], @"Volume", 
     nil]; 
[arr addObject:dic]; 

dic = [NSDictionary dictionaryWithObjectsAndKeys: 
     [NSNumber numberWithInt:160], @"Delay", 
     [NSNumber numberWithInt:100], @"Volume", 
     nil]; 
[arr addObject:dic]; 

dic = [NSDictionary dictionaryWithObjectsAndKeys: 
     [NSNumber numberWithInt:100], @"Delay", 
     [NSNumber numberWithInt:100], @"Volume", 
     nil]; 
[arr addObject:dic]; 

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Delay" ascending:YES]; 
[arr sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]]; 
+0

Działa po zainicjowaniu tablicy zmiennych i dodaniu takich słowników, ale dlaczego to nie działa w moim przypadku, gdy już mam wstępnie wypełnioną zmienną tablicę? Na tym utknąłem: \ – ZeNewb

+0

Czy możesz opublikować kod wypełniający twój słownik? –

+0

Dzięki, ale byłem manekinem i zapisałem je jako struny. Joe złapał go i poprawił. Dziękuję wszystkim! – ZeNewb

Powiązane problemy