Я большое количество данных в моем приложении с функцией поиска. Я использую SQLite и Core Data для поиска и выборки данных.
Вот моя функция поиска,
func fetchSearchResultsWith(_ searchText : String?){
DispatchQueue.global(qos: .background).async {
var resArr : [Int64] = []
let stmt = "SELECT rowid FROM htmlText_fts WHERE htmlText MATCH '\(searchText!)*'"
do {
let res = try self.db.run(stmt)
for row in res {
resArr.append(row[0] as! Int64)
}
} catch {
print(error.localizedDescription)
}
let request : NSFetchRequest<Monos> = Monos.fetchRequest()
request.fetchLimit = 200
let predicate = NSPredicate(format: "id in %@", resArr)
request.predicate = predicate
var arr : [Items]? = []
do {
arr = try context.fetch(request)
} catch {
print(error.localizedDescription)
}
DispatchQueue.main.async(execute: {
self.monosSearchResult = arr
self.tableView.reloadData()
})
}
}
Я использую DispatchQueue.global.async , чтобы избежать зависания пользовательского интерфейса, но затем он возвращает асинхронный массив и мое табличное представление перезагружается с неверным результатом. Если я использую DispatchQueue.global.sync , он работает нормально, но мой пользовательский интерфейс зависает при вводе в searchBar. Я не уверен, что я могу сделать, чтобы получить правильный результат. Любая помощь будет оценена!
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.