【发布时间】:2018-09-24 08:00:29
【问题描述】:
我有一个真正的具体问题。我通常得到这个,但我找不到原因。
主要问题,即使我多次使用 disposeBag 我的一些“subscribe(onNext:”调用。 但我发现了一些东西;呼叫计数线性增加取决于另一个订阅。
例如;我有两个组件,在 viewController 上声明。一个是自定义集合视图,另一个是自定义刷新控制管理器。
self.kpiesCollectionView.collectionHeaderButton.rx.tap
. subscribe(onNext: { [weak self] _ in
// Push to next ViewController
}).disposed(by: self.kpiesCollectionView.disposeBag)
refreshControl.rx.controlEvent(UIControlEvents.valueChanged).asObservable().subscribe(onNext: { () in
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
completion()
}
}).disposed(by: disposeBag)
refreshControl 工作在 self 中处理。它只是将完成返回给 viewController。所以我在 self 中调用 disposeBag。
场景是这样的;
单击按钮 -> 推送到 VC(1 次)
下拉刷新
单击按钮 -> 推送到 VC(2 次)下拉刷新
单击按钮 -> 推送到 VC(3 次)
更新
我发现了问题。这就是为什么,我也更新了标题。原因是我使用的是self.kpiesCollectionView.collectionHeaderButton.rx.tap.subscribe(
在我的请求完成块内,但是当我移到它之外时,它运行良好。
也许它不是正确的地方,但只是想学习。我怎样才能避免这种情况。?即使在块内,我如何调用 subscribe()?
【问题讨论】:
-
从你的描述看来,你多次调用 subscribe 而没有处理掉之前的一次性。如果您发布
subscribe发生的代码,这将有所帮助。我有一种感觉,它被多次调用。尝试只订阅一次,或者在再次订阅之前调用 dispose。 -
@danypata 但为什么订阅结束时的 .disposed(by: self.kpiesCollectionView.disposeBag) 不起作用。我认为它必须处理这个问题。我应该如何处理它?
-
最后dispose,直到bag被释放后才会dispose订阅者。这是一种更方便的处理方式。
标签: ios swift callback rx-swift