Сортировка результатов 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