2017-02-21 70 views
0

我有多個視圖選項卡式應用程序,用戶可以切換 :1爲所有視圖讀取數據庫?

app

所有的這些觀點是由我從我的火力地堡數據庫中讀取的數據填充。現在我在讀數據爲每個視圖在視圖控制器的viewDidLoad()功能:

override func viewDidLoad() { 
     super.viewDidLoad() 

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

不過,我不知道它,它可能只是從數據庫中讀取一次,然後以某種方式分享所有的數據每個選項卡的視圖控制器。

我進入這個故事板擺在首位的方法是從一個不同的故事情節進行賽格瑞:

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都繼承自名爲ChildViewController的UIViewController子類並具有dbRef屬性的示例。或者,您可以刪除for循環並說'如果讓childViewController = childViewControllers [0]爲? YourViewController {//設置dbRef}'並重復所有5。 –