sim*_*ity 8 core-data nssortdescriptor ios swift
应用程序已contentid作为json文件中的数字字符串进入:
let contentid: AnyObject! = jsonFeed["contentid"]
let stream:Dictionary = [
"contentId": contentid as! String,
]
Run Code Online (Sandbox Code Playgroud)
稍后将其保存到[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)
Run Code Online (Sandbox Code Playgroud)
最后,我使用NSSortDescriptor让Core Data以数字升序返回条目:
let sort = NSSortDescriptor(key: "contentid", ascending: true)
fetchRequest.sortDescriptors = [sort]
Run Code Online (Sandbox Code Playgroud)
但条目6 - 10返回为:10,6,7,8,9.使用NSSortDescriptor正确评估这些数字的正确方法是什么?
更新:
对于Swift版本,请参阅下面的Volker的答案.我最终使用:
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: "localizedStandardCompare:")
Run Code Online (Sandbox Code Playgroud)
它将编号的字符串评估为真整数.
更新:Swift 2:
选择器语法已更改,不再接受objc指针.谢谢user1828845.
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))
就我而言,我尝试过
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "formId", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))
它为我工作.
您要排序的值实际上是字符串而不是数字,因此排序顺序很奇怪。对于 Swift,存在一个初始化程序init(key:ascending:selector:),NSSortDescriptor因此您可以
selector: "localizedStandardCompare:"按照 nshipster.com/nssortdescriptor 中的描述使用
它localizedStandardCompare:为您提供了类似于 Finder 的字符串值排序方式,数字自然排序,就像您对数字进行排序一样。所以 1,...,9,10,...,99, 100 等等。
| 归档时间: |
|
| 查看次数: |
5501 次 |
| 最近记录: |