在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]]];
也看到这里