diff --git a/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift b/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift index 2f7b16119..759f1fd50 100644 --- a/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift +++ b/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift @@ -376,12 +376,23 @@ class ConversationSearchViewController: UITableViewController { return } - self.uiDatabaseConnection.read { transaction in - self.searchResultSet = self.searcher.results(searchText: searchText, transaction: transaction, contactsManager: self.contactsManager) - } - - // TODO: more performant way to do this? - self.tableView.reloadData() + var searchResults: SearchResultSet? + self.uiDatabaseConnection.asyncRead({[weak self] transaction in + guard let strongSelf = self else { return } + searchResults = strongSelf.searcher.results(searchText: searchText, transaction: transaction, contactsManager: strongSelf.contactsManager) + }, + completionBlock: { [weak self] in + SwiftAssertIsOnMainThread(#function) + guard let strongSelf = self else { return } + + guard let results = searchResults else { + owsFail("\(strongSelf.logTag) in \(#function) searchResults was unexpectedly nil") + return + } + + strongSelf.searchResultSet = results + strongSelf.tableView.reloadData() + }) } // MARK: - UIScrollViewDelegate