【发布时间】:2015-05-13 12:58:11
【问题描述】:
应用程序有 contentid 来自 json 文件的数字字符串:
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 让 Core Data 按数字升序返回条目:
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:")
并将编号字符串评估为真正的整数。
更新:Swift 2:
选择器语法已更改,不再接受 objc 指针。谢谢user1828845。
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))
【问题讨论】:
-
contentid内部是数字还是字符串? -
@Volker 内部是一个字符串。
-
描述符将这些视为数字。这就是为什么它在 6 之前显示 10。可能的解决方案是将这些数字视为 NSString。
-
存在
init(key:ascending:selector:),您可以使用selector: "localizedStandardCompare:",如此处所述,例如nshipster.com/nssortdescriptor -
@Volker,效果很好。感谢您提供链接,因为到目前为止,您发现 Swift 代码引用是有限的。我去了:
let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: "localizedStandardCompare:")
标签: ios swift core-data nssortdescriptor