2009-08-28 12 views
12

Soy nuevo en el iPhone 3.0 de Apple con compatibilidad con SDK de Core Data y soy relativamente nuevo en el desarrollo de iPhone. Mi pregunta es sobre la clasificación un poco más "compleja" de lo que se cubre en los documentos. Sospecho que estoy haciendo una suposición incorrecta, fundamental.Cómo ordenar un NSMutableArray de Objetos gestionados a través de un gráfico de objetos

¿Cómo puedo ordenar una colección precargada de objetos gestionados por una propiedad que contiene varias capas más profundas en la colección?

Ejemplo: Granja tiene un 1 a muchos a Vaquero (Farm.cowboys) vaquero tiene un 1 a 1 hasta Persona (Cowboy.person) persona tiene lastName (Person.lastName)

El objeto entero el gráfico se ha buscado y los cowboys se muestran a través de UITableView. Ahora, ¿cómo selecciono Cowboys by lastName? ¿Necesito volver a buscarlos? y si es así, ¿cómo hago esto con un ordenamiento anidado?

Actualmente estoy tratando de ordenar un NSMutableArray de cowboys ([farm.cowboys allobjects]) que está bien para esas propiedades en Cowboy. Pero no estoy seguro de cómo hacer que esto funcione al ordenar una colección de Cowboys por Cowboy.person.lastName?

Respuesta

0

Esperemos que alguien tenga una mejor solución. Sin embargo ...

Un objeto contenedor con un selector de comparación y una referencia al objeto de ordenación funciona. No es tan limpio como me gustaría, así que espero que alguien más tenga una alternativa.

En esencia, CowboyWrapper tiene una propiedad de vaquero. CowboyWrapper también tiene un selector de comparación. Al compilar y mantener sincronizado un NSMutableArray de CowboyWrappers, la ordenación funciona.

21

Si puede apuntar a 10.6, puede lograr esto usando bloques. De este modo:

- (NSArray *)sortedArray { 
    return [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){ 
    NSString *lastName1 = [[obj1 person] lastName]; 
    NSString *lastName2 = [[obj2 person] lastName]; 
    return [lastName1 caseInsensitiveCompare:lastName2]; }]; 
} 
+2

También digno de mención, si usted está usando un 'NSMutableArray', sólo puede usar' sortUsingComparator: 'en lugar, si lo desea . –

+0

Debe quitar el molde a NSComparator. – Psycho

5

Puede clasificar así:

[myUnsortedArrayOfCowboys sortedArrayUsingDescriptors: 
    [NSArray arrayWithObject: 
     [NSSortDescriptor 
      sortDescriptorWithKey:"person.lastName" 
      ascending:YES]]]; 

Aviso del ''. en la clave del descriptor de ordenación Así es como atraviesas el gráfico de objetos.

1

Si desea ordenar número y secuencia a continuación, utilizar este

NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil]; 
NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) { 
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch]; 
}]; 
Cuestiones relacionadas