如何对核心数据中的多个键进行排序?

时间:2017-10-12 11:05:52

标签: swift core-data

我创建了两个名为QuestionAnswer的实体,如下所示:

enter image description here

现在,我在某个时间点在两个实体中保存了一些数据。该代码工作正常。

现在,我想用其答案来提问,所以我使用如下代码:

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)

1 个答案:

答案 0 :(得分:1)

您想在Question上创建一个计算变量,如下所示:

var sortedAnswers: [Answer] {
    let answerDescriptor = NSSortDescriptor(key: "answers.display_order", ascending: true)
    return answers.sortedArray(using: [answerDescriptor])
}

answers关系始终是未分类的。但这会让你回到一个排序的数组。

我认为现在还有另一种新方法,但我不熟悉它。