2017-02-21 3 views
0

У меня есть вкладками приложения с несколькими представлениями, пользователь может переключаться между :1 база данных прочитана для всех просмотров?

app

Все эти представления заполняются данными, которые я читаю из моей базы данных Firebase. Сейчас я читаю данные для каждого вида в viewDidLoad() зависимости от его вида контроллера:

override func viewDidLoad() { 
     super.viewDidLoad() 

     let dbRef = FIRDatabase.database().reference().child("data") 
     dbRef.observeSingleEvent(of: .value, with: { snapshot in 
... 

Однако, мне было интересно, это это можно только из базы данных один раз, а затем каким-то образом обмениваться данными между всеми контроллеры представления каждой вкладки.

Путь я получаю в этой раскадровке в первую очередь с Segue из другого видеоредактора:

performSegue(withIdentifier: "MainAppSegue", sender: self) 

Кто-нибудь знает, если это возможно? Нужно ли мне сохранять данные в UserDefaults или что-то в этом роде?

ответ

1

Это определенно возможно. Один из подходов, который вы можете предпринять, состоит в том, чтобы перенести данные Firebase из отдельных контроллеров и в подкласс UITabBarController. Из подкласса контроллера панели вкладок вы можете получить доступ к контроллерам дочерних представлений и установить свойство ссылки базы данных.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let dbRef = FIRDatabase.database().reference().child("data") 
    dbRef.observeSingleEvent(of: .value, with: { snapshot in 

    if let childViewControllers = self.viewControllers { 
     for viewController in childViewControllers { 
      if let childViewController = viewController as? ChildViewController { 
       childViewController.dbRef = dbRef 
      } 
     } 
    } 
} 
+0

Так что я пытаюсь использовать свой код в новом классе я сделал для моей панели вкладок, и я получаю сообщение об ошибке: 'Использование незаявленных типа«ChildViewController''. Есть ли что-то еще, что я должен там положить? Кроме того, из вашего кода каждый контроллер представления разных вкладок должен иметь переменную, называемую 'dbRef' внутри, правильно? – MarksCode

+0

Это пример, предполагающий, что все ваши дочерние VC-контроллеры вашей панели управления наследуются от подкласса UIViewController под названием ChildViewController и имеют свойство dbRef. В качестве альтернативы вы можете отказаться от цикла for и сказать 'if let childViewController = childViewControllers [0] как? YourViewController {// set dbRef} 'и повторить для всех 5. –

Смежные вопросы