核心数据排序描述符与实体之间的关系

时间:2011-05-08 07:36:26

标签: core-data entity nsfetchedresultscontroller relationship nssortdescriptor

我有两个实体,工作客户端。从工作到客户的关系称为 clientOfJob ,这是一种多对一的关系:

Job<<-->Client

我试图理解如何将我的获取结果排序为表视图的部分,其中的部分基于客户端名字。

这是我第一次尝试使用sectionNameForKeyPath,但是我使用了来自CoreDataBooks的示例代码,到目前为止,替换了一些代码已经消除了我今天早些时候遇到的一些严重问题。

这是我试过的代码。我认为它不会起作用,但我不确定我需要使用什么来为客户端排序描述符键和sectionNameKeyPath。

顺便说一句,代码只适用于jobSortDescriptor(没有clientSortDescriptor)并且sectionNameKeyPath设置为nil。然后它只按职务描述排序。我可以获取相关的客户端实体信息,将客户端名称信息放入每个单元格的详细文本列表中,同时我在单元格的textLabel中有作业描述。

- (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;
}

0 个答案:

没有答案