在NSFetchResultController中设置NSSortDescriptor键的问题

在此处输入图像描述

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

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

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

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

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

我的问题是:

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

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

谓词来获取问题:

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

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

 //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]]]; 

也看到这里