Ваша проблема в том, что вы выбираете Category
объекты, но вы пытаетесь установить строки с Person
объектами. Объекты Person
неупорядочены, поскольку они не являются выбранными объектами. Они не имеют никакого отношения к логической структуре таблицы. Фактически, они не могут этого сделать, потому что у них есть отношение ко-многим с Category
, так что один и тот же объект Person
может много раз появляться в одной и той же таблице.
Лучшее решение - разложить это на две иерархические таблицы. Один отображает список категорий, а второй отображает объекты Person
в отношении people
объекта Category
, выбранного в первом представлении таблицы.
Вы можете попытаться заставить его работать с текущим дизайном, попробовав что-то вроде:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Category *sectionCategory=[[fetchedResultsController fetchedObjects] objectAtIndex:indexPath.section];
NSSortDescriptor *sort=[NSSortDescriptor sortWithKey:@"pname" ascending:NO];
NSArray *sortedPersons=[sectionCategory.people sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
Person *rowPerson=[sortedPersons objectAtIndex:indexPath.row];
cell.textLabel.text = rowPerson.pname;
Это будет работать, если ваши данные статичны. Если он изменится во время отображения таблицы, у вас будут проблемы. Это потребует некоторых накладных расходов, потому что вам нужно извлекать и сортировать все объекты Person
объекта sectionCategory
каждый раз, когда вы заполняете строку.
Я настоятельно рекомендую решение с двумя таблицами. Это предпочтительное решение для иерархических данных.