Swift CoreData sortdescriptions不起作用
问题描述:
我想从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)")
}
但它没有排序,这是什么错?
答
默认情况下,request.sortDescriptors
是nil
,使可选 链
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)
}
非常感谢! – just 2015-03-19 09:58:33