Reputation: 7876
I would like to sort the data of a core data NSSet (I know we can do it only with arrays but let me explain...). I have an entity user who has a relationship to-many with the entity recipe. A recipe has the attributes name and id. I would like to get the data such that:
NSArray *id = [[user.recipes valueForKey:@"identity"] allObjects];
NSArray *name = [[user.recipes valueForKey:@"name"] allObjects];
if I take the object at index 1 in both arrays, they correspond to the same recipe...
Thanks
Upvotes: 13
Views: 15012
Reputation: 107754
You need to sort the recipes first:
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
NSArray *sortedRecipes = [[recipes allObjects] sortedArrayUsingDescriptors:sortDescriptors];
you can then extract an array of attributes from the sorted recipes array and the results will remain in sorted order:
NSArray *sortedNames = [sortedRecipes valueForKey:@"name"];
NSArray *sortedIdentities = [sortedRecipes valueForKey:@"identity"];
Upvotes: 40
Reputation: 243156
If you want them to be in the same order, then you need to sort them before extracting the values. Example:
NSArray * sortedRecipes = [user.recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
NSArray * identities = [sortedRecipes valueForKey:@"identity"];
NSArray * names = [sortedRecipes valueForKey:@"name"];
EDIT
My apologies. I just realized this is an iPhone question, and NSSet
doesn't have sortedArrayUsingDescriptors:
on the iPhone. However, it's trivial to work around:
NSArray * recipes = [user.recipes allObjects];
NSArray * sortedRecipes = [recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
....
Upvotes: 7