排序描述符在NSFetchedResultsController中不起作用

时间:2014-07-28 10:59:48

标签: objective-c nssortdescriptor nsfetchedresultscontroller

我正在开发一个使用NSFetchedResultsController的核心数据应用程序。我按字符串fname排序结果。我添加了一个排序描述符,但结果未排序,并在获取时抛出codedata错误。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
    [request setIncludesPendingChanges:NO];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name.fname.string" ascending:YES];
    [request setSortDescriptors:@[sortDescriptor]];
    _fetchController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                           managedObjectContext:[BCSCoreDataInterface sharedInstance].mainQueueContext
                                                            sectionNameKeyPath  :@"name.fname.stringGroupByFirstInitial"                                                   cacheName            :nil];

    self.fetchController.delegate = self;

    NSError *error = nil;

    if (![self.fetchController performFetch:&error]) {
        // error handling
    }

1 个答案:

答案 0 :(得分:0)

尝试使用

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name.fname.string" ascending:YES selector:@selector(caseInsensitiveCompare:)];

修改

我可以看到您将排序描述符设置为“name.fname.string”,但是传递给结果控制器的第一个排序描述符将对该节进行排序,并且您的排序描述符与sectionNameKeyPath不匹配。 因此,您需要添加第一个排序描述符来对部分进行排序,然后添加第二个排序描述符以对每个部分中的行进行排序。所以试试这个:

NSSortDescriptor *sectionSort = [[NSSortDescriptor alloc] initWithKey@"name.fname.stringGroupByFirstInitial" ascending:YES];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name.fname.string" ascending:YES];

[request setSortDescriptors: @[sectionSort, sortDescriptor]];
祝你好运。