2015-03-19 91 views
0

我想從coredata中獲取所有的排序數據,但它不起作用。 這裏是我的實體:Swift CoreData sortdescriptions不起作用

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獲得排序的數據:

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)") 
} 

但它沒有排序,這是什麼錯?

回答

1

默認情況下,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()這也可以做得更SWIFTY:

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) 
} 
+0

非常感謝! – just 2015-03-19 09:58:33