我有三个表:作业,问题,作业 - 问题
作业表将包含与作业相关的信息,例如其ID,标题等。
问题表将包含作业问题,并具有问题ID,问题标题,问题文本等属性。
问题表没有作为属性的分配ID,因为要避免在“问题”表中有重复的条目,因为多个“分配”可以共享相同的问题。
作业和问题通过名为Assignment-Questions的表相关,该表具有作业ID和问题ID。
例如:让我们说作业1有3个问题,ID为1,2和3
在这个例子中,问题和作业 - 问题表都有3个条目
接下来,作业2有3个问题,ID 4,5和1(与作业1相同)
在这个例子中,问题表将有5个条目(1个问题在作业1和2中都很常见),作业 - 问题将有6个条目。(作业1和2各3个)
在这种情况下,我想创建一个获取控制器,以按照它添加到Assignment-Questions表中的顺序获取与赋值2相关的所有问题。
我不太清楚如何编写一个谓词和排序描述符,其中结果是两个表的组合,通过维护oder。我尝试了很少的排列和组合,似乎没有什么对我有用。请帮我提一下建议。
答案 0 :(得分:0)
@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];
...
}