gpt4 book ai didi

Swift KVO changeHandler 未被调用

转载 作者:行者123 更新时间:2023-11-28 15:10:12 25 4
gpt4 key购买 nike

我有以下代码来刷新多个项目。这一切都是异步发生的。

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 完成时运行。

我怎样才能做到这一点?

最佳答案

问题确实是观察者在内存中被释放了。您需要将其存储在某个地方。如果您想存储任意数量的观察者,只需在范围内较高的某个位置声明一个数组,并将您的观察者添加到该数组。

或者,您可以简单地将一个新的 BlockOperation 添加到操作队列,并将所有其他操作添加为依赖项。这将使您的完成操作在其他所有操作完成后运行。

关于Swift KVO changeHandler 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com