Сортировка результатов CoreData с помощью NSPredicate в Swift
в настоящее время я пишу простое приложение для телефонной книги в Swift и должен сортировать результаты запроса CoreData.
в основном, я настроил NSManagedObject под названием "каталог", с соответствующими именами полей в - например," name_f " - это имя пользователя.
имена в запрашиваемой базе данных CoreData находятся в алфавитном порядке. Однако, хотя первый поиск возвращает результаты в алфавитном порядке, дальнейшие поиски не после того как база данных были запрошены другими областями программы. Я не уверен, почему это так, но хочу ввести код, чтобы активно сортировать возвращаемый массив по любому полю.
мой код, который возвращает массив NSManagedObject выглядит следующим образом:
func SearchName(nameToSearch: String) -> NSArray {
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext! //I added the !
let request = NSFetchRequest(entityName: "Directory")
request.returnsObjectsAsFaults = false //will return the instance of the object
//request.predicate = NSPredicate(format: "name_f = %@", nameToSearch)
//request.predicate = NSPredicate(format: "name_f MATCHES '.*((nameToSearch)).*'")
request.predicate = NSPredicate(format: "name_f MATCHES[cd] '((nameToSearch)).*'")
var results:NSArray = context.executeFetchRequest(request, error: nil)
return results
}
в стороне, я использую следующий код, чтобы вытащить определенное значение из возвращаемых результатов (где searchResult является экземпляром класса, в котором находится SearchName):
var particularEntry = self.searchResult[self.selectedItem] as Directory
lblDetailName.text = thisPerson.name_f
В идеале, я хотел бы иметь возможность: 1 - Изменение код выше, чтобы убедиться, что массив "результаты" отсортирован соответствующим образом. 2-Определите код, который впоследствии может быть применен к массиву результатов для повторной сортировки по любому полю.
спасибо заранее!
1 ответов
Спасибо-перед запросом требовались следующие строки.строка предиката:
let sortDescriptor = NSSortDescriptor(key: "name_f", ascending: true)
let sortDescriptors = [sortDescriptor]
request.sortDescriptors = sortDescriptors