我正在对后台线程上的大量文本文件进行搜索,返回主线程以将结果附加到数组,然后将行插入表视图:
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秒钟以上)。我知道行插入必须在主线程上进行,这才导致挂起。
我想到了一个主意:插入屏幕上的行,然后在用户向下滚动时插入其余行。我不知道如何在代码中做到这一点。
有什么想法吗?谢谢。