关于上面的关系图,较早之前,我在Assignment和Question实体之间有太多关系,并且为了解决问题排序问题而将其断开。

现在,通过联接表AssignmentQuestion与“问题分配”之间的关系。

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

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

但是有了这个排序键,我得到了一个例外:“例外=这里不允许多个键”。经过调查,我发现这是因为从问题到AssignmentQuestion表的“一对多”关系。

我的问题是:

1)如何为基于questionOrderIndex的排序描述符设置排序键?

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

谓词以获取问题:

NSString *predicateString = [NSString stringWithFormat:@"self.evaluationQuestion.assignmentEvaluation.assignmentId == %@", @"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]]];

see here

07-26 09:37