nsfetchedresultscontroller基于项目计数排序部分

时间:2016-04-16 10:36:24

标签: ios objective-c core-data nspredicate nssortdescriptor

我使用以下代码从一个国家/地区的branch表格中获取结果:

- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController != nil)
    {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"BranchData" inManagedObjectContext:[BRCoreRepository instance].managedObjectContext];
    [fetchRequest setEntity:entity];

    [fetchRequest setFetchBatchSize:5];

    NSString *cache = nil;

    if (searchValue.length > 0){
        fetchRequest.predicate =[NSPredicate predicateWithFormat:@" city contains[cd] %@ || address contains[cd] %@ || branchCode contains[cd] %@ ",searchValue,searchValue,searchValue];
    } else cache = @"_preditc_state";

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"branchState" ascending:YES];
    [fetchRequest setSortDescriptors:@[sortDescriptor ]];

    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                    managedObjectContext:[BRCoreRepository instance].managedObjectContext
                                                                      sectionNameKeyPath:@"branchState"
                                                                               cacheName:cache
                                 ];
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;
}

在当前代码中,我可以根据分支的branchState创建部分。它工作正常,但我有另一个问题 - 我想根据部分项目计数订购项目。因此,如果在状态B中我们有200个项目,但在A部分中我们在结果中有150个项目,我们会在部分B上方显示A部分。这也可以用NSFetchedResultsController吗?

1 个答案:

答案 0 :(得分:0)

您必须在父类中建模关系计数。这可以通过覆盖NSManagedObject子类中的关系的setter来自动化。