Swift 核心数据异步获取在主线程上结束

Swift 核心数据异步获取在主线程上结束,swift,core-data,Swift,Core Data,我正在尝试执行一个异步请求,作为我的应用程序中搜索结果更新程序的一部分 我编写了以下代码 func updateSearchResults(for searchController: UISearchController) { guard let text = searchController.searchBar.text else {return} let threadingContext = NSManagedObjectContext(concurr

我正在尝试执行一个异步请求,作为我的应用程序中搜索结果更新程序的一部分

我编写了以下代码

    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
            }
        }
    } 
func updateSearchResults(对于searchController:UISearchController){
guard let text=searchController.searchBar.text else{return}
让threadingContext=NSManagedObjectContext(并发类型:.privateQueueConcurrencyType)
threadingContext.parent=self.context
DispatchQueue.global(qos:.userInitiated).async{
让fetchRequest=MyObject.fetchRequest()作为NSFetchRequest
fetchRequest.predicate=获取谓词(文本)
做{
let objects=尝试threadingContext.fetch(fetchRequest.map)({object in
返回object.objectID
})
}
捕获{return}
DispatchQueue.main.async{
//将结果传递给搜索视图控制器
}
}
} 
但是UI仍然很慢(即使我没有做任何显示更新),并且查看时间分析器,我发现我的主线程80%的时间都花在以下方面:

因此,我的请求似乎仍然被发送到主线程,我不明白。有人会看到我的错误吗


(我在上面尝试了几种方法,例如使用
threadingContext。执行
,但结果相同)

好的,我理解了,我应该阅读苹果的文档,但基本上

如果上下文的父存储是另一个托管对象上下文,则获取和保存操作由父上下文而不是协调器进行中介

这有点微妙,但是如果对获取请求执行的操作(而不是获取请求本身)很慢,那么我的构造会很有用

解决方案是设置
threadingContext.persistentStoreCoordinator