Основные данные, сортировка дочерних объектов "один ко многим"
Итак, скажем, у меня есть родительский родительский родитель, и у родителя есть отношение к детям (родительские дети) от одного до многих, и все они имеют имена. Теперь, при первоначальной выборке для родителей, я могу указать дескриптор сортировки, чтобы вернуть его в порядке имени, но как я могу запросить детей по порядку? Если я делаю [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]];