2014-08-27 2 views
12

В настоящее время я пишу приложение простой телефонной книги в Swift и вам нужно отсортировать результаты из запроса CoreData.Сортировка результатов CoreData с использованием NSPredicate в Swift

В принципе, я создал объект 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 - Изменить код, чтобы убедиться, что массив «результатов» отсортирован соответствующим образом. 2 - Определите код, который впоследствии может быть применен к массиву результатов для повторной сортировки по любому полю.

Заранее благодарен!

+0

Вы должны взглянуть на 'sortDescriptors' свойство' NSPredicate'? В «Руководстве по программированию основных данных» также много примеров (в Objective-C), см. Https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html#//apple_ref/DOC/UID/TP40002484-SW1. –

+0

sortDescriptors - свойство NSFetchRequest. Я не думаю, что у NSPredicate есть такая собственность. – Sandeep

+1

@ insane-36: Вы правы, я имел в виду NSFetchRequest. –

ответ

38

Спасибо - Следующие строки должны были до request.predicate линии:

let sortDescriptor = NSSortDescriptor(key: "name_f", ascending: true) 
let sortDescriptors = [sortDescriptor] 
request.sortDescriptors = sortDescriptors 
Смежные вопросы