2017-10-08 89 views
0

我有一個應用程序,我想連接到兩個不同的Firebase數據庫。 我有兩個viewControllers是單獨能夠連接到每個數據庫,但如果我連接到第一個數據庫,然後連接到另一個 - 應用程序崩潰Firebase/Swift兩個數據庫連接

我有2個info.plist文件和2個ViewControllers連接按鈕/繼續。

my files

這是我第一次的viewController

import UIKit 
import Firebase 
class ViewController: UIViewController { 
var ref: DatabaseReference! 
    var handle:UInt! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    let filePath = Bundle.main.path(forResource: "GoogleService-Info-anden", ofType: "plist") 
    guard let fileopts = FirebaseOptions.init(contentsOfFile: filePath!) 
     else { assert(false, "Couldn't load config file") } 
    FirebaseApp.configure(options: fileopts) 
    ref = Database.database().reference() 
    ref?.child("UserVandreture").child("navn").setValue("Inger") 
} 

override func viewDidDisappear(_ animated: Bool) { 
    ref.removeObserver(withHandle: handle) 
} 

}

我可以連接到火力點 - 當我加載應用程序,它會發生。

二的viewController

import UIKit 
import Firebase 

class AndenDBViewController: UIViewController { 
var ref: DatabaseReference! 
var handle:UInt! 
let fileName = "Bambusstien" 
override func viewDidLoad() { 
    super.viewDidLoad() 
    let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist") 
    guard let fileopts = FirebaseOptions.init(contentsOfFile: filePath!) 
     else { assert(false, "Couldn't load config file") } 
    FirebaseApp.configure(options: fileopts) 
    ref = Database.database().reference() 
    response() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
//kan læse navn,type, længde og link 
func response() { 
    ref?.child("Vandreture").child(fileName).observe(.value, with: { (snapshot) in 
     let dict = snapshot.value as? [String: AnyObject] 
     let navn = dict!["navn"] as? String 
     print(navn as Any) 

     let type = dict!["type"] as? String 
     print(type as Any) 

     let Længde = dict!["length"] as? String 
     print(Længde as Any) 

     let link = dict!["link"] as? String 
     print(link as Any) 
    }) 
    } 
override func viewDidDisappear(_ animated: Bool) { 
    ref.removeObserver(withHandle: handle) 
    } 


} 

如果我outcomment在前面的viewController數據庫調用,該控制器還能夠連接到火力/數據庫和讀取數據,但如果我不outcomment這個數據,它會在第一個數據庫中設置值,當我按下按鈕轉到第二個viewController時,應用程序崩潰。

我已將2個plist文件的targetMemebeship設置爲相同的應用程序名稱。 enter image description here

錯誤消息說該應用程序已配置 - 但我認爲ref.removeObserver(句柄)在ViewDidDissapear()將斷開與數據庫的連接,連接到其他數據庫之前 - 那麼是什麼錯誤??

enter image description here

+0

起坐:我忘了把句柄值如此... var句柄:UInt = 0 但該應用程序崩潰與相同的消息 –

回答

0

基本上我需要我的數據的保護,但我還沒有填充數據庫卻又如此.. 我的問題的解決方案是與規則的一部分工作 - 只具有單一的數據庫。 讓用戶有寫訪問數據庫的某些部分,並且只具有隻讀訪問其他地區 - 是這樣的:

{ 
"rules": { 
"myPersonal":{ 
".read": true, 
".write": "auth != null" 

}, 
"myPublic": { 
".read": "auth != null", 
".write": true 

} 

} }