如何对核心数据中的多对多关键字进行排序?
我已经创建了两个实体称为Question
和Answer
如下:如何对核心数据中的多对多关键字进行排序?
现在,我保存在两个实体的一些数据在某个时间点。这个代码工作正常。
现在,我想它的答案来获取的问题,所以我使用的代码如下:
class func getAllQuestions(inManagedObjectContext context: NSManagedObjectContext) -> [Question] {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Question")
let sortDescriptor = NSSortDescriptor(key: "question_id", ascending: true)
let sortDescriptors = [sortDescriptor, answerDescriptor]
request.sortDescriptors = sortDescriptors
if let questions = (try? request.execute()) as? [Question] {
return questions
}
return []
}
正如你可以看到,我刚才写的代码来获取问题,我自动得到了答案相关具体答案。
我的要求:
但是,当我得到的问题和答案会自动添加到它,我想答案由display_order进行排序。
请问您能告诉我,我该如何添加NSSortDescriptor
?
我已经试过?
我已经试过这种描述:
let answerDescriptor = NSSortDescriptor(key: "answers.display_order", ascending: true)
但后来我得到运行时错误:
<NSSQLFetchRequestContext: 0x600000381110> , to-many key not allowed here with userInfo of (null)
要在Question
如创建一个计算的变量如下:
var sortedAnswers: [Answer] {
let answerDescriptor = NSSortDescriptor(key: "answers.display_order", ascending: true)
return answers.sortedArray(using: [answerDescriptor])
}
answers
关系一直在持续将会被排除。但是这会让你找回一个有序的数组。
我认为现在还有另一种更新的方式来做到这一点,但我并不熟悉它。
感谢您的回答。我已经实现了它,正如你所说的使用计算变量,现在它工作正常。 – Vishal
@Vishal真棒 –
当您在代码上使用它们时,您可以对答案进行分类。如错误中所述,您不能根据回答的显示顺序对问题进行排序。 – pkallu
该代码令人困惑。你正在获取一个'Question',但是你想对这个结果使用一个排序描述符? –
@TomHarrington我没有提到一个问题。我正在提取一系列问题。当我收到问题时,我也希望在每个问题中对答案进行排序。 – Vishal