【发布时间】:2018-08-13 02:49:32
【问题描述】:
问题:使用 .mainQueueConcurrencyType 线程处理核心数据时 UI 被冻结
UI:任何UI updates、UITable scrolling 等,但在这个问题中,我使用SwiftSpinner 的示例,它是活动指示器,
https://github.com/icanzilb/SwiftSpinner
设置:
iOS:11.4,设备:iPhone 7 plus,Xcode:9.4.1
我的代码是这样的
let bgContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
func doCoreData(progress : @escaping (Double) -> ()) {
bgContext.performAndWait {
for i in 1...10{
let cent : Double = Double(i)/Double(10)
// do some coredata work adding and updating
progress(cent)
// hide SwiftSpinner at the end
if i == 10 {
SwiftSpinner.hide()
}
}
}
}
func orgnizeThings (){
doCoreData { (cent) in
DispatchQueue.main.async {
let perCent = cent * 100
SwiftSpinner.show(progress: cent, title: "loading \(perCent)")
}
}
}
调用orgnizeThings() 函数将完成Core Data工作,但我想向用户展示该函数完成了多远
在此设置中,SwiftSpinner UIView 被冻结
【问题讨论】:
-
“一些核心数据的工作添加和更新”听起来很重要。你可能不想在主队列上这样做,因为这样做会阻塞你的 UI,直到它完成
标签: ios swift core-data concurrency