【发布时间】:2020-03-18 13:55:55
【问题描述】:
iOS 13 在OperationQueue 类中引入了progress 属性。同时,Apple 将 operations 和 operationCount 属性标记为已弃用,这表明它们不应再用于报告队列进度。
我的问题是我无法让progress 属性像我期望的那样工作(这基本上是开箱即用的)。我也找不到关于这个新属性的任何文档(除了它现在存在)。
我试图让它在一个新的 SingleView 项目中工作,该项目在主 UIViewController 上有一个 UIProgressView。此示例深受https://nshipster.com/ios-13/ 的启发。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var progressView: UIProgressView!
private let operationQueue: OperationQueue = {
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1
queue.underlyingQueue = .global(qos: .background)
return queue
}()
override func viewDidLoad() {
super.viewDidLoad()
self.progressView.observedProgress = operationQueue.progress
self.operationQueue.cancelAllOperations()
self.operationQueue.isSuspended = true
for i in 0...9 {
let operation = BlockOperation {
sleep(1)
NSLog("Operation \(i) executed.")
}
self.operationQueue.addOperation(operation)
}
}
override func viewDidAppear(_ animated: Bool) {
self.operationQueue.isSuspended = false
}
}
控制台显示队列按预期运行(作为串行队列),但进度条上没有任何移动。
progress 属性上的 KVO 也直接不起作用,所以我怀疑 OperationQueue 的 progress 属性是问题的原因,而不是 UIProgressView。
知道我在这里缺少什么吗?或者它可能是 iOS 13 中的一个错误?该问题存在于模拟器以及运行 iOS 13.3.1 的 iPhone 6s Plus 上。谢谢!
【问题讨论】:
标签: swift progress-bar ios13 nsoperationqueue