4

在此处输入图像描述

关于上面的关系图,早些时候,我在 Assignment 和 Question 实体之间有太多的关系,这被打破以解决问题排序问题。

现在,Assignment 与 Question 的关系是通过连接表 AssignmentQuestion。

这里的想法是根据 AssignmentQuestion 表的 questionOrderIndex 属性对问题进行排序。

我正在通过 NSFetchResultController 获取作业问题。我已经写了一个谓词来相应地获取问题。但由于我希望基于 questionOrderIndex 对问题进行排序,因此我通过问题实体的排序描述符的排序键是 assignmnetQuestion.questionOderIndex。

但是使用这个排序键,我得到一个异常:“Exception = to-many key not allowed here”。经过调查,我发现这是因为 Question 到 AssignmentQuestion 表的“一对多”关系。

我的问题是:

1)如何根据questionOrderIndex设置排序描述符的排序键?

2)我们真的需要在核心数据中有一个连接表来按顺序对问题进行排序吗?

获取问题的谓词:

NSString *predicateString = [NSString stringWithFormat:@"self.evaluationQuestion.assignmentEvaluation.assignmentId == %@", @"1"]; 
4

1 回答 1

1

如果您不需要监听问题的更改(视图控制器外部),则可以取而代之的是获取 AssignmentQuestion 实体,并预获取附加的问题。稍后,在您的视图控制器中,使用它们的预取关系
而不是使用AssignmentQuestion实体question

//code not tested
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"AssignmentQuestion"];
[request setPredicate:[NSPredicate predicateWithFormat:@"assignmentEvaluation.assignmentId == %@",assignmentId]];
[request setRelationshipKeyPathsForPrefetching:@[@"question"]];
[request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"questionOrderIndex" ascending:YES]]];

见这里

于 2013-04-02T19:07:02.683 回答