Добрый день!
Есть БД с более 70000 записи. При поиске с (SearchBar) клавиатура залипает на несколько секунд и очень медленно фильтруется данные в UITableView.
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
initializeFetchedResultsController()
self.tableView.reloadData()
}
// MARK: - Initialization FRC
func initializeFetchedResultsController() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let moc = appDelegate.managedObjectContext
let request = NSFetchRequest< Entity>(entityName: "Entity")
request.fetchBatchSize = 20
if !(searchBar.text?.isEmpty)! {
if searchBar.text?.count == 1 {
request.predicate = NSPredicate(format: "word LIKE %@", searchBar.text!+"*")
} else {
request.predicate = NSPredicate(format: "word CONTAINS[cd] %@", searchBar.text!)
}
}
let sortDescriptorWordID = NSSortDescriptor(key: "word", ascending: true)
request.sortDescriptors = [sortDescriptorWordID]
fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: "mainCache")
fetchedResultsController.delegate = self as? NSFetchedResultsControllerDelegate
do {
try fetchedResultsController.performFetch()
} catch {
fatalError("Failed to initialize FetchedResultsController: \(error)")
}
}
Для атрибута (word) добавлен индекс.
Как можно оптимизировать получении данных?
Можно фильтрацию данных использовать в другом потоке?