Передайте данные двум контроллерам представления в двух панелях вкладок - PullRequest
0 голосов
/ 19 октября 2019

У меня есть страница входа, которая получает имя пользователя от пользователя, эта страница входа подключена к UITabbarController, который содержит вкладки (viewControllers). После нажатия на кнопку входа в систему, я передаю имя пользователя в первый вид на вкладках через prepare segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "profile" { 
        let barViewControllers = segue.destination as! UITabBarController
        let navProfile = barViewControllers.viewControllers![0] as! UINavigationController
        if let profile = navProfile.viewControllers[0] as? ProfilePage {
            profile.username = self.usernameInput.text!.replacingOccurrences(of: " ", with: "")
        }
    }
}

Проблема в том, что это имя пользователя также должно переходить на вторые вкладки. Я пытался сделать это в prepare segue на первой вкладке

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "profile" { 
        let barViewControllers = segue.destination as! UITabBarController
        let navProfile = barViewControllers.viewControllers![0] as! UINavigationController
        if let profile = navProfile.viewControllers[0] as? ProfilePage {
            profile.username = self.usernameInput.text!.replacingOccurrences(of: " ", with: "")
        }
        let navTimeline = barViewControllers.viewControllers![1] as! UINavigationController
        if let timeline = navTimeline.viewControllers[1] as? TimelinePage {
            timeline.username = self.usernameInput.text!.replacingOccurrences(of: " ", with: "")
        }
    }
}

Но приложение вылетает с этой ошибкой

index 1 beyond bounds [0 .. 0]

Может кто-нибудь помочь мне, как передать имя пользователя на второйа также вкладка?

1 Ответ

0 голосов
/ 19 октября 2019

Заменить

 if let timeline = navTimeline.viewControllers[1] as? TimelinePage {

на

 if let timeline = navTimeline.viewControllers.first as? TimelinePage {

Поскольку навигация имеет только 1 VC, поэтому индекс 1 будет аварийно завершать


Также лучше иметькласс синглтона вашей пользовательской модели, общий для всего приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...