Swift-UITableView插入行导致死锁

时间:2018-08-16 15:27:33

标签: swift uitableview search rows deadlock

我正在对后台线程上的大量文本文件进行搜索,返回主线程以将结果附加到数组,然后将行插入表视图:

func searchFor(_ text: String) {
    DispatchQueue.global(qos: .userInteractive).async {
        for path in self.allPoemsPaths {
            for poem in Helper.getPoems(filePath: path) {
                if poem.body.applyingTransform(.stripDiacritics, reverse: false)!.contains(text) {

                    DispatchQueue.main.async {
                        self.searchResults.append(poem)

                        self.resultsTable.beginUpdates()
                        self.resultsTable.insertRows(at: [IndexPath(row: self.searchResults.count-1, section: 0)], with: .none)
                        self.resultsTable.endUpdates()
                    }
                }
            }
        }
    }
}

对于大量搜索结果,根据搜索的不同,视图在一段时间内被锁定/无响应(对于普通单词,它会锁定3秒钟以上)。我知道行插入必须在主线程上进行,这才导致挂起。

我想到了一个主意:插入屏幕上的行,然后在用户向下滚动时插入其余行。我不知道如何在代码中做到这一点。

有什么想法吗?谢谢。

0 个答案:

没有答案