Ваша клавиатура зависает, потому что вы выполняете фильтр в главном потоке, который требует времени для работы с 35000 объектов. Насколько я понимаю, вам нужно поместить строку ниже в фоновом потоке или использовать GCD для ее асинхронного выполнения
myRealmObject = realm.objects(MyRealmObject.self).filter("german beginswith[cd] %@", searchText)
Создайте последовательную очередь
private let serialQueue =
DispatchQueue(label: "com.example.searchQueue", attributes: .serial)
, а затем используйте приведенный ниже код в вашем textDidChange
serialQueue.async { [weak self] in
guard let self = self else {
return
}
// put your filter logic in here
//self.myRealmObject = self.realm.objects(MyRealmObject.self).filter("german beginswith[cd] %@", searchText)
DispatchQueue.main.sync { [weak self] in
self?.tableView.reloadData()
}
}
Однако есть еще кое-что, что вам нужноучитывать.Когда пользователь печатает очень быстро, стоит подумать об отмене предыдущих задач перед началом новой или, возможно, использовать asyncAfter