Сортировка NSSets основного объекта данных - Objective-c - PullRequest
13 голосов
/ 11 марта 2010

Я хотел бы отсортировать данные базовых данных NSSet (я знаю, что мы можем сделать это только с массивами, но позвольте мне объяснить ...). У меня есть пользователь сущности, имеющий отношение ко многим с рецептом сущности. Рецепт имеет атрибуты name и id. Я хотел бы получить данные так:

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

если я возьму объект с индексом 1 в обоих массивах, они соответствуют одному и тому же рецепту ...

Спасибо

Ответы [ 2 ]

40 голосов
/ 11 марта 2010

Сначала нужно отсортировать рецепты:

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

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

затем вы можете извлечь массив атрибутов из отсортированного массива рецептов и результаты останутся в отсортированном порядке:

NSArray *sortedNames = [sortedRecipes valueForKey:@"name"];
NSArray *sortedIdentities = [sortedRecipes valueForKey:@"identity"];
7 голосов
/ 11 марта 2010

Если вы хотите, чтобы они были в том же порядке, то вам нужно отсортировать их перед извлечением значений. Пример:

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

EDIT

Мои извинения. Я только что понял, что это вопрос iPhone, и NSSet не имеет sortedArrayUsingDescriptors: на iPhone. Однако обойти это тривиально:

NSArray * recipes = [user.recipes allObjects];
NSArray * sortedRecipes = [recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...