【发布时间】:2017-12-13 04:41:56
【问题描述】:
我有以下代码来刷新多个项目。这一切都是异步发生的。
func refresh(_ types: [DataTypes], callback: ((String) -> Void)?) {
let refreshOperationQueue: OperationQueue = OperationQueue()
let operations: [Operation] = types.map({ RefreshItem.init(type: $0) })
refreshOperationQueue.addOperations(operations, waitUntilFinished: false)
let _: NSKeyValueObservation = refreshOperationQueue.observe(\.operationCount) { _, _ in
if refreshOperationQueue.operationCount == 0 {
callback?("Success")
}
}
}
它可以很好地重新加载数据。但问题是 observe changeHandler 永远不会被调用。
我假设这是因为该观察者正在内存中被释放(但我可能完全错了)。如果是这种情况,我不确定如何以有效的方式解决这个问题。如果我将其设置为更高的范围,那么它一次只能处理 1 次刷新,这不是最干净的解决方案。
基本上我希望callback?("Success") 在OperationQueue 完成后运行。
我怎样才能做到这一点?
【问题讨论】:
标签: swift key-value-observing nsoperationqueue nsoperation