2012-06-04 25 views
6

Ya he examinado algunas respuestas usando los diversos métodos de clasificación de NSMutableArray, pero por alguna razón no me funcionan.Ordenando matriz mutable por clave de diccionario

Estoy tratando de ordenar la matriz mutable que contiene diccionarios por la clave Delay dentro de cada diccionario. Sin embargo, la matriz "ordenada" es exactamente la misma que la matriz original.

Por cierto, funciona bien si creo una matriz mutable ficticia y la lleno con diccionarios que contienen números, pero por alguna razón no ordenará esta matriz mutable que estoy inicializando.

¿Qué estoy haciendo mal?

Aquí está mi código:

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); 

Aquí está la matriz que contiene los diccionarios:

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; 
    } 
) 

Respuesta

8

El código anterior es fina cuando uso NSNumber s en mi diccionario. Eso me lleva a creer que el valor Delay se almacena como cadenas en su diccionario. Lo que deberá hacer entonces es ordenar por las cuerdas integerValue.

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

Correcto eres ... Eso funcionó. Necesito regresar y arreglar eso. ¡Gracias! – ZeNewb

1

intenta lo siguiente, que trabajó conmigo

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

Funciona cuando inicia la matriz mutable y agrega diccionarios de ese tipo, pero ¿por qué no funciona para mi caso cuando ya tengo una matriz mutable rellena previamente? A eso me ato: \ – ZeNewb

+0

¿Puedes publicar el código que puebla el diccionario? –

+0

Gracias, pero yo era un maniquí y los almacené como cadenas. Joe lo atrapó y me dio una solución. ¡Gracias de todos modos! – ZeNewb

Cuestiones relacionadas