ios - Swift CoreData sortdescriptions 不起作用

标签 ios swift core-data

我想从 coredata 中获取所有排序的数据,但它不起作用。 这是我的实体:

class Kurzus: NSManagedObject {

    @NSManaged var kurzuskod: String
    @NSManaged var kurzusnev: String
    @NSManaged var kredit: NSNumber
    @NSManaged var felvett: NSNumber
    @NSManaged var teljesitett: NSNumber
    @NSManaged var jegy: NSNumber
}

这是我获取排序数据的函数:

func getSortedData(entity: String, keys: [String], ascend: [Bool]) -> [AnyObject] {
    var request = NSFetchRequest(entityName: entity)
    for i in 0..<keys.count {
        let sd = NSSortDescriptor(key: keys[i], ascending: ascend[i])
        request.sortDescriptors?.append(sd)

    }
    var results = context.executeFetchRequest(request, error: nil)!
    return results
}

但是我得到一个未分类的数据... 我尝试按“kredit”属性对数据进行排序:

println("=========================")
    let res3 = dbHandler.getSortedData(entity, keys: ["kredit"], ascend: [true]) as [Kurzus]
    for k in res3 {
        println("Kurzuskód: \(k.kurzuskod) \nKurzusnev: \(k.kurzusnev)\nKredit: \(k.kredit)\nFelvett: \(k.felvett)\nTeljesitett: \(k.teljesitett)\nJegy: \(k.jegy)")
}

但是它没有排序,这有什么问题吗?

最佳答案

默认情况下,request.sortDescriptorsnil,所以可选的 链接

request.sortDescriptors?.append(sd)

什么都不做。你必须先创建一个数组然后 附加排序描述符:

let request = NSFetchRequest(entityName: entity)
request.sortDescriptors = [] // <-- Start with empty array!
for i in 0..<keys.count {
    let sd = NSSortDescriptor(key: keys[i], ascending: ascend[i])
    request.sortDescriptors!.append(sd)
}

这也可以使用 map() 更快地完成:

let request = NSFetchRequest(entityName: entity)
request.sortDescriptors = map(0 ..< keys.count) {
    NSSortDescriptor(key: keys[$0], ascending: ascend[$0])
}

或使用 map() + Zip2(创建一个序列对 来自给定的数组):

let request = NSFetchRequest(entityName: entity)
request.sortDescriptors = map(Zip2(keys, ascend)) {
    NSSortDescriptor(key: $0, ascending: $1)
}

关于ios - Swift CoreData sortdescriptions 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29139857/

相关文章:

ios - 前置摄像头无法添加输入,从后到前切换摄像头?

ios - Swift:按排序描述符对数组进行排序

ios - 错误 : Cannot subscript a value of type 'inout [Agenda]' (aka 'inout Array<Agenda>' )

ios - 从 Apple Watch 获取心率信息至配对的 iPhone

swift - 无法为 '[String]' 类型的值添加下标

swift - 我们如何从 Apple TV App 打开 Apple TV 商店

ios - Sqlite 文件位置核心数据

ios - 如何从 url 获取 objectID?

android - 在 Android 上播放的 iOS 上的音频文件听不到我的声音。只有声音不好

ios - 抑制特定的弃用消息