在我的应用程序中(用Swift编写)我使用具有两种配置的Core Data模型,每种配置使用不同的保存路径(一个在应用程序包中是只读的,另一个在Documents文件夹中)。我在两个配置中设置了一个具有以下属性的实体“Domanda”: 在其他配置中,我设置了一个具有以下属性的实体“StatDomanda”: “StatDomanda”用于用户数据,而“Domanda”用作预加载源。我知道我不能在两个实体之间建立关系(两种配置),但我会根据StatDomanda.numero == Domanda的“StatDomanda”实体的“corrette”属性来命令“Domanda”实体。 numero和StatDomanda .argomento == Domanda.argomento.nomeArgomento。 并非所有“Domanda”对象都具有相应的“StatDomanda”对象。 我使用此谓词在“Domanda”实体中设置了一个fetched属性(称为“statistiche”)
$ FETCH_SOURCE.numero = numero AND $ FETCH_SOURCE.argomento.nomeArgomento = argomento
但我不明白如何使用它来订购对象。
感谢您的帮助!
答案 0 :(得分:0)
我找到了一个解决方案,我不知道它是否是最好的方式,但它有效! 在我的核心数据管理器类(ModelManager)中,我有这个函数用于获取所有" Domanda"实体:
func getAllQuestions() -> [Domanda] {
let fetchRequest = NSFetchRequest(entityName: "Domanda")
let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [Domanda]
return fetchResults!
}
在我的ViewController中,我使用此代码来获取" Domanda"的排序数组。基于属性的实体" corrette" " statistiche"取得财产:
override func viewDidLoad() {
super.viewDidLoad()
var arrayDomande = ModelManager.instance.getAllQuestions()
var sortedArrayDomande = self.sortArray(arrayToSort: arrayDomande)
}
func sortArray(arrayToSort sarray: Array<Domanda>) -> Array<Domanda> {
// 1 - Filter the array to find only questions that have stats
var onlyAnswered = sarray.filter({($0.valueForKey("statistiche") as [Domanda]).count == 1})
// 2 - Sort the array based on fetched property
var sortedArrayDomande = sorted(onlyAnswered, {
let first = ($0.valueForKey("statistiche") as [StatDomanda])[0]
let firstC = first.corrette.integerValue
let second = ($1.valueForKey("statistiche") as [StatDomanda])[0]
let secondC = second.corrette.integerValue
return firstC > secondC
})
return sortedArrayDomande
}
甚至是浓缩形式:
// 2 - Sort the array based on fetched property
var sortedArrayDomande = sorted(onlyAnswered, {($0.valueForKey("statistiche") as [StatDomanda])[0].corrette.integerValue > ($1.valueForKey("statistiche") as [StatDomanda])[0].corrette.integerValue})
再见,伙计们,下次见!