Можно ли с помощью Core Data сортировать «многие» части отношения To-Many во время запроса на выборку? - PullRequest
2 голосов
/ 23 октября 2010

Я использую Базовые данные для кэширования приличного объема информации, и у меня установлена ​​связь To-Many среди моих управляемых объектов.Естественно, я использую NSFetchRequest для получения массива особой стороны этих отношений.Тем не менее, я заполняю UITableView, используя сторону отношения «многие», и мне бы хотелось, чтобы он сортировался по алфавиту при извлечении данных.:

«сотрудник» и «начальник» являются NSManagedObjects в отношении «многие» - у каждого начальника много сотрудников, но у сотрудников только один начальник.После получения массива боссов, я нажимаю UITableViewController, содержащий список сотрудников.Мне бы хотелось, чтобы сотрудники предварительно сортировались во время NSFetchRequest, чтобы их было проще отображать.Возможно ли это, и как мне это сделать?

1 Ответ

2 голосов
/ 25 октября 2010

Почему бы не получить с обратного? Я предполагаю, что вы уже знаете уникальный идентификатор интересующего вас босса, поэтому вы можете создать предикат, подобный этому:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"boss.bossId == %K", bossId];
NSFetchRequest *req = [[NSFetchRequest alloc] init];
[req setEntity:employeeEntity];
[req setPredicate:pred];

Это должно извлечь любого сотрудника с соответствующим bossId, затем вы можете добавить дескриптор сортировки к этому запросу на выборку по алфавиту.

В качестве альтернативы вы можете получить массив экземпляров NSManagedObject, которые вы извлекаете в текущей реализации, и отсортировать их, используя дескриптор сортировки (предполагается, что имя вашего сотрудника находится в свойстве «имя»):

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YESorNO];
NSArray *sorted = [entities sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

Теперь заполните таблицу, используя "отсортированный".

Примечание: Я немного озадачен тем, почему вы не используете NSFetchedResultsController для этого, так как он позаботится и о секционировании для вас.

...