我有一个应用程序,我想连接到两个不同的firebase数据库。 我有两个viewControllers,它们可以单独连接到每个数据库,但如果我连接到第一个数据库,然后连接到另一个 - 应用程序崩溃
我有2个info.plist文件和2个与按钮/ segue连接的ViewControllers。
这是我的第一个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中对数据库调用进行注释,则此控制器也能够连接到firebase /数据库并读取数据,但如果我没有取消注释该数据,它将在第一个数据库中设置该值,当我按下按钮转到第二个viewController时,应用程序崩溃。
我已将2个plist文件的targetMemebeship设置为相同的应用程序名称。
错误消息显示已经配置了应用程序 - 但我认为ViewDidDissapear()中的ref.removeObserver(句柄)会在连接到其他数据库之前断开与数据库的连接 - 所以出了什么问题?
答案 0 :(得分:0)
基本上我需要保护我的数据,但我还没有填充数据库所以.. 我的问题的解决方案是使用规则部分 - 只有一个数据库。 允许用户对数据库的某些部分具有写访问权限,并且只具有对其他部分的读访问权限 - 例如:
{
"rules": {
"myPersonal":{
".read": true,
".write": "auth != null"
},
"myPublic": {
".read": "auth != null",
".write": true
}
} }