2010-03-11 17 views
13

Me gustaría ordenar los datos de un NSSet de datos centrales (sé que podemos hacerlo solo con matrices pero déjenme explicar ...). Tengo un usuario de entidad que tiene una relación con ... muchos con la receta de la entidad. Una receta tiene los atributos nombre e id. me gustaría obtener los datos de tal manera que:Ordenando NSSets de una entidad de datos central - Objective-c

NSArray *id = [[user.recipes valueForKey:@"identity"] allObjects]; 
NSArray *name = [[user.recipes valueForKey:@"name"] allObjects]; 

si tomo el objeto en el índice 1 en ambas matrices, que corresponden a la misma receta ...

Gracias

Respuesta

40

Es necesario ordenar las recetas primera:

NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; 

NSArray *sortedRecipes = [[recipes allObjects] sortedArrayUsingDescriptors:sortDescriptors]; 

a continuación, puede extraer una serie de atributos de la matriz recetas ordenados y los resultados permanecerán en ordenados orden:

NSArray *sortedNames = [sortedRecipes valueForKey:@"name"]; 
NSArray *sortedIdentities = [sortedRecipes valueForKey:@"identity"]; 
+0

Gracias este método funciona bien ... Acabo de cambiar en el descriptor @ "nombre" con @ "id" y en el iPhone no hay método de instancia para crear un descriptor, así que cambié el método sortDescriptorWithKey con initWithKey y lancé ¡eso! – ncohen

7

Si quiere que estén en el mismo orden, luego debe ordenarlos antes de extraer los valores. Ejemplo:

NSArray * sortedRecipes = [user.recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors]; 
NSArray * identities = [sortedRecipes valueForKey:@"identity"]; 
NSArray * names = [sortedRecipes valueForKey:@"name"]; 

EDITAR

Mis disculpas. Me acabo de dar cuenta de que esta es una pregunta de iPhone, y NSSet no tiene sortedArrayUsingDescriptors: en el iPhone. Sin embargo, es trivial para evitar:

NSArray * recipes = [user.recipes allObjects]; 
NSArray * sortedRecipes = [recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors]; 
.... 
+1

El problema es que user.recipes es un NSSet ... ¡así que no funcionará! ¿Y cómo puedo ordenar arrayOfSortDescriptors? thx – ncohen

Cuestiones relacionadas