Swift, Переменная подписка для Tabbar Controller с использованием RxSwift - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь использовать Rxswift в приложении, встроенном в Tabbar Controller.

У меня есть три контроллера вида на панели вкладок. Есть несколько подписок на всех контроллерах представления. Но для простоты скажем, что первый и второй контроллеры представления подписываются на третий контроллер представления, чтобы получить некоторые значения.

Я подписан на третий контроллер вида как закодированный;

    func startSubscription() {
    let settingsNavigationVC = self.tabBarController?.viewControllers![2] as! UINavigationController
    let settingsVC = settingsNavigationVC.topViewController as! SettingsViewController
    settingsVC.selectedUser.subscribe(onNext: { [weak self] user in
        self?.userToShow = user
    }).disposed(by: disposeBagForFirst)
    }

Это прекрасно работает, если перед любой манипуляцией с данными нажимаются все вкладки, поэтому может быть запущена вся подписка и все приложение работает нормально. Но если пользователь непосредственно подключается к третьему виртуальному каналу после загрузки приложения и вносит изменения. Затем данные на первом виртуальном канале обновляются, поскольку они уже загружены при запуске приложения, но данные на втором виртуальном канале не изменяются, поскольку подписка еще не была выполнена, поскольку представление не было загружено до изменений, внесенных в третьем виртуальном канале.

Я пытался сделать это с помощью метода экземпляра vc, но он тоже не работает, потому что с контроллерами панели вкладок нет экземпляров, которые бы создавали экземпляры более одного раза, как я полагаю.

Мой вопрос; как я могу убедиться, что все представления загружаются до того, как пользователь взаимодействует с приложением, или как мне изменить метод моей подписки, чтобы он работал независимо от того, нажали ли все вкладки (загружены представления).

Заранее спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

В этом решении я загружаю все представления из первого метода viewDidLoad () первого виртуального канала. Если у вас есть представление о том, как мы можем изменить метод подписки, чтобы нам не нужно было загружать все представления, пожалуйста, предоставьте ответ.

Я нашел решение благодаря Как загрузить все представления в UITabBarController?

Это немного отличается, так как я использую навигационные контроллеры. Я вызываю этот метод в конце viewDidLoad () после того, как все настройки, выборка данных и все завершено.

    func loadAllViewsOfTabbarController() {
        if let viewControllers = tabBarController?.viewControllers {
            for viewController in viewControllers {
                let viewInNav = viewController as! UINavigationController
                let _ = viewInNav.topViewController?.view!
            }
        }
    }
...