NSSortDescriptor评估递增数字(Swift) [英] NSSortDescriptor evaluating ascending numbers (Swift)

查看:252
本文介绍了NSSortDescriptor评估递增数字(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 NSSortDescriptorand 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆