2

目前,我想将 的值绑定Observable<UIViewController>到我的UIPageViewController. 最初的想法简单明了:

viewControllerObservable
    .subscribe(onNext: { [weak self] viewController in

        self?.pageVC.setViewControllers([viewController], 
                                        direction: .forward, 
                                        animated: false, 
                                        completion: nil)
     })
    .disposed(by: disposeBag)

但是如果 viewControllerObservable 中的值变化太快,页面视图控制器会在完成添加前一个视图控制器之前收到新的 set 命令,我得到NSInternalInconsistencyException.

我可以使用 使该代码更具“反应性” Binder,但我仍然会面临同样的问题。

这里很明显的方法是使用油门,但它似乎是很脏的修复,掩盖问题,而不是修复它。

理想情况下,我需要一些方法来处理进一步的值处理,直到completion被调用setViewControllers

我怎样才能做到这一点?

4

1 回答 1

1

所以,到目前为止我最好的解决方案是使用第二个 observable 来进行同步。

let sync = BehaviorSubject<Void>(value: ())

Observable.zip(pageProvider.selectedViewControllerObservable, sync)
    .subscribe(onNext: { [weak self] viewController, _ in
        self?.pageVC.setViewControllers([viewController],
                                        direction: .forward,
                                        animated: false,
                                        completion: {sync.onNext()})
    })
    .disposed(by: disposeBag)

Observable.zip等待两个可观察对象发出值时,它将被“锁定”,直到sync接收到下一个值。

于 2018-04-27T12:25:24.870 回答