2017-10-12 33 views
0

我已经创建了两个实体称为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) 
+0

当您在代码上使用它们时,您可以对答案进行分类。如错误中所述,您不能根据回答的显示顺序对问题进行排序。 – pkallu

+0

该代码令人困惑。你正在获取一个'Question',但是你想对这个结果使用一个排序描述符? –

+0

@TomHarrington我没有提到一个问题。我正在提取一系列问题。当我收到问题时,我也希望在每个问题中对答案进行排序。 – Vishal

回答

1

要在Question如创建一个计算的变量如下:

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

answers关系一直在持续将会被排除。但是这会让你找回一个有序的数组。

我认为现在还有另一种更新的方式来做到这一点,但我并不熟悉它。

+1

感谢您的回答。我已经实现了它,正如你所说的使用计算变量,现在它工作正常。 – Vishal

+0

@Vishal真棒 –