2017-10-08 17 views
0

2つの異なるfirebaseデータベースに接続したいアプリケーションがあります。 それぞれのデータベースに個別に接続できる2つのビューコントローラーがありますが、最初のデータベースに接続して後で別のアプリケーションに接続するとクラッシュするFirebase/Swift 2つのデータベース接続

2つのinfo.plistファイルと2つのViewControllerが接続されていますボタン/セグ。

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) 
} 

}

である私はfirebaseに接続することができます - 私はアプリをロードするときに起こるいます。

第二の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) 
    } 


} 

私は、以前のViewControllerでデータベース呼び出しをoutcomment場合は、このコントローラはまた、firebase /データベースに接続し、データを読み取ることができますが、私はこのデータをoutcommentていない場合最初のデータベースの値を設定し、ボタンを押して2番目のviewControllerに移動すると、アプリケーションがクラッシュします。

私は2つのplistファイルのtargetMemebeshipを同じアプリケーション名に設定しました。 enter image description here

エラーメッセージは、アプリがすでに設定されていることを述べている - だから何がある - 私はViewDidDissapearでref.removeObserver(ハンドル)()他のデータベースに接続する前に、データベースへの接続を切断するだろうと思ったが違う??

enter image description here

+0

アップ:私が扱う設定を忘れてしまったようなもの - ユーザーがデータベースの特定の部分への書き込みアクセス、および唯一の他の部分への読み取りアクセス権を持つができるようになり value so ... varハンドル:UInt = 0 しかし、同じメッセージでアプリがクラッシュする –

答えて

0

基本的に私は私のデータの保護を必要としますが、私は、データベースを埋めていなかった、まだ..だから私の問題へ ソリューションは、ルールの部分で動作するようにした - ちょうど単一のデータベースを持ちます。

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

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

} 

} }

関連する問題