NSSortDescriptor评估升序(Swift)
应用程序从json文件中以数字string的forms进入:
let contentid: AnyObject! = jsonFeed["contentid"] let stream:Dictionary = [ "contentId": contentid as! String, ]
它后来被保存到[NSManagedObject]:
var articles = [NSManagedObject]() let entity = NSEntityDescription.entityForName("Article", inManagedObjectContext: managedContext) let article = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) article.setValue(stream["contentId"], forKey: "contentid") articles.append(article)
最后,我使用NSSortDescriptor让核心数据按照数值递增的顺序返回:
let sort = NSSortDescriptor(key: "contentid", ascending: true) fetchRequest.sortDescriptors = [sort]
但条目6 – 10返回为: 10,6,7,8,9 。 使用NSSortDescriptor正确评估这些数字的正确方法是什么?
更新:
Swift版本,请参阅下面的Volker的答案。 我结束了使用:
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: "localizedStandardCompare:")
并将编号string评估为真正的整数。
更新:Swift 2:
select器语法已经改变,不再接受objc指针。 谢谢你user1828845。
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))
你想sorting的值实际上是string,而不是数字,因此奇怪的sorting顺序。 对于Swift,存在NSSortDescriptor
的初始化init(key:ascending:selector:)
,因此可以使用selector: "localizedStandardCompare:"
,例如nshipster.com/nssortdescriptor
localizedStandardCompare:
给你一个类似于string值sorting的Finder,数字sorting的方式就像对数字进行sorting一样。 所以1,…,9,10,…,99,100等
在我的情况下,我尝试了
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "formId", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))
它为我工作。
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "message_time", ascending: true) let sortedResults = arrayForMessages.sortedArray(using: [descriptor]) print(sortedResults)