NSFetchedResultController复杂的排序案例

时间:2014-07-17 08:14:02

标签: ios nsfetchedresultscontroller

我有以下数据模型:

[Agency] <--->> [AgencyRating] <<---> [RatingType]

rating types的数量(例如整体,品牌,设计,编程等)。每个agency都可以拥有所有这些评级类型(例如agency .FooBar的设计点数为1050,品牌点数为700点。

表格结构:

Agency:name:string RatingType:name:string AgencyRating:agency_ref:与agency的关系,ratingType_ref:与rating type的关系,值:整数。

我有分割视图控制器。左侧包含可用的rating types。当用户选择任何评级类型时,我想按右侧的评级价值代理商进行排序。

我想用NSFetchedResultController来实现它。我理解如何获得评级值以在单元格中显示它,但我不明白如何制作排序描述符。

目前我有:

控制器:

_contentFetchController = [Agency MR_fetchAllGroupedBy:nil withPredicate:[NSPredicate predicateWithValue:YES] sortedBy:@"name" ascending:YES];

细胞:

- (void) configureForAgency:(Agency *) agency ratingType:(RatingType *) ratingType forIndexPath:(NSIndexPath *) path {
    self.positionLabel.text = [NSString stringWithFormat: @"%d", (int)path.row + 1];

    UIImage *image = [UIImage imageWithContentsOfFile:agency.logoPath];
    if (image) {
        self.logoImageView.image = image;
    }

    self.nameLabel.text = agency.name;

    // HERE IS VALUE OF RATING
    self.ratingValueLabel.text = [[agency ratingForRatingType:ratingType] stringValue];
}

正如您所看到的:我按名称排序,但我需要根据所选的评级类型按评级值排序。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

为了做到这一点,您需要提取Agencies,其中包含具有所选评级类型的关联AgencyRating,并按评级值对所有内容进行排序。

我认为评分类型为ratingType,评分值为ratingValueAgencyRating关联为agencyRatings。我还假设每个代理机构只能对每种评级类型进行一次代理评级(如果没有,则必须按所选代理类型的所有代理评级的总和进行排序)。

根据MR_前缀判断,我猜您使用的是我不熟悉的MagicalRecord,但是您可以使用普通NSFetchRequestNSFetchedResultsController来实现这一点。< / p>

首先,您需要设置NSFetchRequest

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Agency"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY agencyRatings.ratingType = %@", ratingType];
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"agencyRatings.ratingValue" ascending:YES] ];

然后,您可以设置NSFetchedResultsController,就像通常使用您刚刚创建的fetchRequest一样设置它。

每次用户更改ratingType时,您都需要更改fetchRequest的{​​{1}}并致电predicate上的performFetch

我想你需要稍微调整一下以适应你的情况,但我们的想法是有一个指向相关表的谓词和排序描述符。