iOS 13 ввел свойство progress
в классе OperationQueue
. В то же время Apple пометила свойства operations
и operationCount
как устаревшие, что указывает на то, что они больше не должны использоваться для сообщения о прогрессе в очереди.
Моя проблема заключается в том, что я не могу получить свойство progress
работать, как я ожидаю, что это сработает (что в основном из коробки). Также я не смог найти никакой документации относительно этого нового свойства (кроме того, что оно теперь существует).
Я пытался заставить его работать в новом проекте SingleView, который имеет один UIProgressView
на главном UIViewController
, Этот образец в значительной степени вдохновлен 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
}
}
Консоль показывает, что очередь работает должным образом (как последовательная очередь), но нет никакого движения в прогрессе bar.
Также KVO для свойства progress
напрямую не работает, поэтому я подозреваю, что причиной проблемы является свойство progress
OperationQueue, а не UIProgressView
.
Есть идеи, что мне здесь не хватает? Или это может быть ошибка в iOS 13? Проблема существует в симуляторе, а также в iPhone 6s Plus, оба работают iOS 13.3.1. Спасибо!