NSSortDescriptor评估递增数字(Swift) [英] NSSortDescriptor evaluating ascending numbers (Swift)
问题描述
应用程式已将 contentid
作为json档案中的数字字串输入:
App has contentid
coming in as a number string from a json file:
let contentid: AnyObject! = jsonFeed["contentid"]
let stream:Dictionary = [
"contentId": contentid as! String,
]
后来保存到[NSManagedObject]:
It is later saved to [NSManagedObject] with:
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让Core Data返回升序:
Finally, I use NSSortDescriptor to have Core Data return entries in numerical ascending order:
let sort = NSSortDescriptor(key: "contentid", ascending: true)
fetchRequest.sortDescriptors = [sort]
但条目 6 - 10 返回为: 10,6,7,8,9 。使用NSSortDescriptor正确计算这些数字的正确方法是什么?
But entries 6 - 10 are returned as: 10, 6, 7, 8, 9. What would be the correct method of having these numbers evaluated correctly using NSSortDescriptor?
UPDATE:
对于Swift版本,请参见下面的Volker的回答。我最后使用:
For the Swift version, please see Volker's answer below. I ended up using:
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: "localizedStandardCompare:")
,并将编号的字符串评估为真实整数。
and it evaluated the numbered strings as true integers.
UPDATE:Swift 2:
选择器语法已更改,不再接受objc指针。谢谢user1828845。
Selector syntax has changed and no longer accepts objc pointers. Thank you user1828845.
let sort = NSSortDescriptor(key:contentid,ascending:true,selector:#selector(NSString.localizedStandardCompare :)))
推荐答案
你想要的值实际上是字符串,奇怪的排序顺序。对于Swift,存在 NSSortDescriptor
的初始化器 init(key:ascending:selector:)
,因此可以使用
selector:localizedStandardCompare:
(如nshipster.com/nssortdescriptor
The values you want to sot are actually strings and not numbers, thus the strange sort order. For Swift there exist an initializer init(key:ascending:selector:)
of NSSortDescriptor
and thus you can use
selector: "localizedStandardCompare:"
as described for example at nshipster.com/nssortdescriptor
$ c> localizedStandardCompare:给你一个Finder像字符串值的排序,数字的排序方式,自然排序数字。所以1,...,9,10,...,99,100等。
The localizedStandardCompare:
gives you a Finder like sorting of string values in a way that numbers are sorted naturally as you would sort numbers. So 1,...,9,10,...,99, 100 etc.
这篇关于NSSortDescriptor评估递增数字(Swift)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!