我有以下数据模型:
[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];
}
正如您所看到的:我按名称排序,但我需要根据所选的评级类型按评级值排序。有什么想法吗?
答案 0 :(得分:2)
为了做到这一点,您需要提取Agencies
,其中包含具有所选评级类型的关联AgencyRating
,并按评级值对所有内容进行排序。
我认为评分类型为ratingType
,评分值为ratingValue
,AgencyRating
关联为agencyRatings
。我还假设每个代理机构只能对每种评级类型进行一次代理评级(如果没有,则必须按所选代理类型的所有代理评级的总和进行排序)。
根据MR_
前缀判断,我猜您使用的是我不熟悉的MagicalRecord,但是您可以使用普通NSFetchRequest
和NSFetchedResultsController
来实现这一点。< / 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
。
我想你需要稍微调整一下以适应你的情况,但我们的想法是有一个指向相关表的谓词和排序描述符。