根据获取的属性对实体进行排序

时间:2015-04-06 21:31:20

标签: ios swift core-data

在我的应用程序中(用Swift编写)我使用具有两种配置的Core Data模型,每种配置使用不同的保存路径(一个在应用程序包中是只读的,另一个在Documents文件夹中)。我在两个配置中设置了一个具有以下属性的实体“Domanda”: Domanda Entity 在其他配置中,我设置了一个具有以下属性的实体“StatDomanda”: StatDomanda Entity “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

但我不明白如何使用它来订购对象。

感谢您的帮助!

1 个答案:

答案 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})

再见,伙计们,下次见!