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] 

但条目610返回为: 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)