0

我有三个表:作业、问题、作业-问题

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

问题表将保存作业问题,并具有问题 ID、问题标题、问题文本等属性。

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

作业和问题通过一个名为 Assignment-Questions 的表相关联,该表具有作业 ID 和问题 ID。

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

在这种情况下,Questions 和 Assignment-Questions 表都有 3 个条目

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

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

在这种情况下,我想创建一个 fetch 控制器,按照添加到 Assignment-Questions 表的顺序来获取与作业 2 相关的所有问题。

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

4

1 回答 1

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];
    ...
}
于 2013-08-14T15:54:39.993 回答