Основные дескрипторы сортировки данных со связями между сущностями - PullRequest
1 голос
/ 08 мая 2011

У меня есть две сущности, Работа и Клиент .Отношение между заданием и клиентом называется 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;
}
...