Базовые данные, сортируя one-many дочерние объекты

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

Спасибо, Sam

10
задан Shizam 14 March 2014 в 20:03
поделиться

2 ответа

Sam,

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

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]];

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

11
ответ дан 3 December 2019 в 15:51
поделиться

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

NSSortDescriptor *alphaSort = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
NSArray *children = [[parent.children allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:alphaSort]];
16
ответ дан 3 December 2019 в 15:51
поделиться