Ios 核心数据-通过组合两个表的数据获取结果

Ios 核心数据-通过组合两个表的数据获取结果,ios,core-data,nsfetchedresultscontroller,Ios,Core Data,Nsfetchedresultscontroller,我有三张表格:作业,问题,作业问题 分配表将包含与分配相关的信息,如id、标题等 问题表将包含作业问题,并具有问题ID、问题标题、问题文本等属性 问题表没有作业ID作为属性,因为为了避免问题表中的重复条目,多个作业可以共享同一个问题 作业和问题通过名为“作业问题”的表进行关联,该表具有作业ID和问题ID 例如:假设作业1有3个ID为1、2和3的问题 在这种情况下,问题和作业问题表都将有3个条目 接下来,作业2有3个ID为4、5和1的问题(与作业1相同) 在这种情况下,问题表将有5个条目(1个问题

我有三张表格:作业,问题,作业问题

分配表将包含与分配相关的信息,如id、标题等

问题表将包含作业问题,并具有问题ID、问题标题、问题文本等属性

问题表没有作业ID作为属性,因为为了避免问题表中的重复条目,多个作业可以共享同一个问题

作业和问题通过名为“作业问题”的表进行关联,该表具有作业ID和问题ID

例如:假设作业1有3个ID为1、2和3的问题

在这种情况下,问题和作业问题表都将有3个条目

接下来,作业2有3个ID为4、5和1的问题(与作业1相同)

在这种情况下,问题表将有5个条目(1个问题在作业1和作业2中都很常见),作业问题将有6个条目。(作业1和作业2各有3个条目)

在这个场景中,我想创建一个fetch控制器,以按照作业2添加到作业问题表的顺序获取与作业2相关的所有问题


我不太确定如何编写谓词和排序描述符,其中结果是通过维护order将两个表组合起来。我尝试了一些排列和组合,但似乎没有任何效果。请帮我提些建议。

@MartinR说得对。您可以对联接表进行操作。我猜到了一些字段名之类的,代码当然没有经过测试,但它应该能让您继续:

fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"AssignmentQuestion"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"question.order" ascending:YES]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"assignment = %@", assignment];
fetchRequest.relationshipKeyPathsForPrefetching = @[@"question"];
然后在VC中,您可以对AssignmentQuestion对象的FRC进行操作:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    Question* question = [[_fetchedResultsController objectAtIndexPath:indexPath] question];
    ...
}

与其这样做,不如在问题添加到表中时创建并保存一个问题数组,然后检索该数组。我可以给你们一个谓词,但不能给它一个排序描述符。-获取和排序AssignmentQuestion对象更容易。马丁,我的视图控制器完全是基于fetch控制器实现的。据我所知,如果没有排序描述符,我们无法创建一个fetch控制器。有什么想法吗?FRC需要排序描述符,这是正确的。我不知道如何根据您的需要为问题实体创建排序描述符。我唯一的想法是取而代之的是获取并排序AssignmentQuestion。每个AssignmentQuestion都有一个指向相应问题的指针,因此可以使用AssignmentQuestion对象显示问题标题、文本等。