2015-05-13 2 views
5

App имеет contentid приходит как номер строки из файла JSON:NSSortDescriptor номера оценки восходящие (Swift)

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] 

Но записи - возвращены как: 10, 6, 7, 8, 9. Каким будет правильный метод правильного вычисления этих чисел с помощью NSSortDescriptor?

UPDATE:

Для Swift версии, пожалуйста, см ответ Фолькера ниже. Я закончил тем, что использовал

let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: "localizedStandardCompare:") 

и оценил пронумерованные строки как истинные целые числа.

UPDATE: Swift 2:

синтаксис Selector не изменился и больше не принимает ObjC указатели. Спасибо пользователю1828845.

let sort = NSSortDescriptor(key: "contentid", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))

+0

является 'contentid' номером или строкой внутри? – Volker

+0

@Volker Это внутренняя строка. – simplexity

+0

Дескриптор рассматривает их как числа. Вот почему он показывает 10 до 6. Возможное решение рассматривает эти числа как NSString. –

ответ

3

Значения, которые вы хотите отсортировать строки на самом деле, а не числа, таким образом, странный порядок сортировки. Для Swift существует инициализатор init(key:ascending:selector:) из NSSortDescriptor и, таким образом, вы можете использовать selector: "localizedStandardCompare:", как описано, например, в nshipster.com/nssortdescriptor

localizedStandardCompare: дает вам Finder, как сортировка строковых значений таким образом, что числа отсортированных естественно, как вы будете сортировать числа. Таким образом, 1, ..., 9,10, ..., 99, 100 и т.д.

4

В моем случае я попытался его с

let descriptor: NSSortDescriptor = NSSortDescriptor(key: "formId", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:))) Its работает для меня.

0
 let descriptor: NSSortDescriptor = NSSortDescriptor(key: "message_time", ascending: true) 
     let sortedResults = arrayForMessages.sortedArray(using: [descriptor]) 
     print(sortedResults) 
Смежные вопросы