Фильтр iOS NSFetchedResultsController Эффективно - PullRequest
3 голосов
/ 01 февраля 2011

Я пытаюсь добавить поддержку поиска в Базовые данные при поддержке UITableView и начал сталкиваться с некоторыми проблемами производительности.В настоящее время у меня есть ассоциации с двумя NSFetchedResultsController (один для обычного и один для поиска).В моих UISearchDisplayDelegate методах я освобождаю и воссоздаю свой NSFetchedResultsController после каждого вызова.Тем не менее, это вызывает отставание при наборе текста!Есть ли более эффективный способ фильтрации NSFetchedResultsController?Я установил размер своей партии примерно в 50 единиц, и в моей базе данных есть несколько тысяч записей, если это имеет значение.Спасибо!

Ответы [ 3 ]

4 голосов
/ 01 февраля 2011

Документация NSFetchedResultsController довольно ясно показывает:

  • Если есть кеш, удалите его.
  • Обновить свойство fetchRequest. Обратите внимание, что вы не можете просто изменить существующий запрос на выборку; Вы должны создать новый.
  • Звоните -executeFetch:.
3 голосов
/ 01 июня 2011

Я использую следующий код для фильтрации результатов FetchedResultController

NSPredicate *pre = [NSPredicate predicateWithFormat:@"attribute CONTAINS [cd] %@", searchString];
NSArray *searchResults = [[self.fetchedResultsController fetchedObjects] filteredArrayUsingPredicate:pre]

Надеюсь, это поможет!

0 голосов
/ 05 июня 2017

Да, вы можете:

Создать экземпляр NSFetchRequest и каждый раз изменять его дескриптор сортировки:

 let shortDescriptor = NSSortDescriptor(key: key, ascending: ascending)
    request.sortDescriptors = [shortDescriptor]

    do {
        try fetchedResultViewController?.performFetch()
    } catch let error as NSError {
        print("Error in fetch \(error)")
    }

Читать документ Apple: https://developer.apple.com/reference/coredata/nsfetchedresultscontroller

...