首页 > 解决方案 > 迅捷 | 在闭包中初始化并推送 UIViewController

问题描述

例如,我们有三个 UIViewController: A、B、C

  1. 我们从AB

  2. 在 B 我们调用一些 API:

func getProduct(productNumber: String) {
        someService.rxGetProduct(productNumber: productNumber)
            .asObservable()
            .trackActivity(loading)
            .subscribe(onNext: { [weak self] product in
                guard let `self` = self else { return }
                let cViewModel: CViewModel = .init()
                let cViewController: CViewController = .init(viewModel: cViewModel)
                self.navigationController?.pushViewController(cViewController, animated: true)
            }, onError: { [weak self] error in
                // error handling
            }).disposed(by: disposeBag)
}
  1. 在上面的方法中,我们得到一些产品模型并推动C视图控制器关闭。

问题是,当我们从C视图控制器弹出到B视图控制器时——C视图控制器没有取消初始化。当我们从B视图控制器弹回到A视图控制器时, C视图控制器正在取消初始化。

我做错了什么?

标签: iosswiftclosuressystem.reactivedeinit

解决方案


  1. 您可能正在创建保留周期trackactivity或任何loading内容
  2. 考虑使用take(1)andasSingle()以防您的 observable 不打算完成。

推荐阅读