У меня есть две сущности, Работа и Клиент .Отношение между заданием и клиентом называется clientOfJob , которое представляет собой отношение многие-к-одному:
Job<<-->Client
Я пытаюсь понять, как отсортировать результаты выборки по разделам длятабличное представление с разделами, основанными на именах клиентов.
Это моя первая попытка использовать sectionNameForKeyPath, но я использую пример кода из CoreDataBooks , и пока замена некоторых из этого кода устранила некоторые серьезные проблемы, с которыми я столкнулся сегодня.1014 *
Вот код, который я пробовал.Я не думал, что это сработает, но я не уверен, что мне нужно использовать для ключа дескриптора сортировки клиента и для sectionNameKeyPath.
Кстати, код хорошо работает только с jobSortDescriptor (без clientSortDescriptor) и с sectionNameKeyPath, установленным в nil.Тогда это просто сортировка по описанию работы.Я могу получить информацию о связанном объекте клиента, поместив информацию об имени клиента в подробный текстовый ярлык каждой ячейки, пока у меня есть описание задания в текстовом ярлыке ячейки.
- (NSFetchedResultsController *) fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription * entity = [NSEntityDescription entityForName:@"Job" inManagedObjectContext:dataInterface.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:10];
NSSortDescriptor *clientSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"clientOfJob.firstName" ascending:YES];
NSSortDescriptor *jobSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"jobDescription" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:clientSortDescriptor, jobSortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:dataInterface.managedObjectContext sectionNameKeyPath:@"clientOfJob.firstName" cacheName:@"Jobs"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[jobSortDescriptor release];
[clientSortDescriptor release];
[sortDescriptors release];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved Error %@, %@", error, [error userInfo]);
abort();
}
return fetchedResultsController;
}