В настоящее время я пишу простое приложение для телефонной книги в Swift и вам нужно сортировать результаты из запроса CoreData.
В принципе, я создал объект NSManagedObject под названием "Directory" с соответствующими именами полей, например. "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 - Измените код выше, чтобы убедиться, что массив "results" отсортирован соответствующим образом. 2 - Определите код, который впоследствии может быть применен к массиву результатов для повторной сортировки по любому полю.
Спасибо заранее!