Основные данные, сортировка дочерних объектов "один ко многим"

Итак, скажем, у меня есть родительский родительский родитель, и у родителя есть отношение к детям (родительские дети) от одного до многих, и все они имеют имена. Теперь, при первоначальной выборке для родителей, я могу указать дескриптор сортировки, чтобы вернуть его в порядке имени, но как я могу запросить детей по порядку? Если я делаю [parent.children allObjects], он просто возвращает их в беспорядке, и мне придется сортировать после факта каждый раз.

Спасибо, Сэм

Ответ 1

Сэм,

Если я правильно прочитал ваш вопрос, вы хотите настроить выборку, которая возвращает отсортированный список дочерних элементов определенного родителя. Для этого я бы установил выборку для дочерних объектов, а затем использовал предикат для ограничения результатов:

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"children" inManagedObjectContext:moc]];
[request setSortDescriptors:[NSArray initWithObject:[[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(parent == %@)", parent]];

Очевидно, что ваши имена сущностей и атрибутов могут отличаться. В последней строке родительская переменная должна быть ссылкой на экземпляр NSManagedObject родителя, чьи дети вы хотите.

Ответ 2

Если вы просто хотите использовать NSArray, а не NSFetchedResultsController, то есть другой способ:

NSSortDescriptor *alphaSort = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
NSArray *children = [[parent.children allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:alphaSort]];