【发布时间】:2021-05-22 17:01:07
【问题描述】:
我正在尝试在我的应用中执行一个异步请求,作为搜索结果更新程序的一部分。
我写了以下代码
func updateSearchResults(for searchController: UISearchController) {
guard let text = searchController.searchBar.text else {return}
let threadingContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
threadingContext.parent = self.context
DispatchQueue.global(qos: .userInitiated).async {
let fetchRequest = MyObject.fetchRequest() as NSFetchRequest<MyObject>
fetchRequest.predicate = get_predicate(text)
do {
let objects = try threadingContext.fetch(fetchRequest).map({ object in
return object.objectID
})
}
catch {return}
DispatchQueue.main.async {
// Pass results to the search view controller
}
}
}
但 UI 仍然很慢(即使我没有进行任何显示更新),并且查看时间分析器,我发现我的主线程将 80% 的时间花在以下方面:
所以看来我的请求仍在发送到主线程,我不明白。有人会看到我的错误吗?
(我在上面尝试了几种不同的方法,例如使用threadingContext.perform,但结果相同)
【问题讨论】: