firebase / swift 4 - 等到firebase完成配置

时间:2018-03-30 01:26:49

标签: ios swift firebase firebase-realtime-database swift4

所以我的FirebaseApp.configure函数中有application didFinishLaunchingWithOptions。如果我一直在跑步和停止模拟器,它有时会崩溃,说:

  

由于未捕获的异常'InvalidPathValidation'而终止应用,原因:'(child :)必须是非空字符串且不包含'。' '#''$''['或']''

我做了我的研究,herehere。两者都说这是因为我在配置完成之前尝试访问数据库。前者通常比后者更好,但有时仍会崩溃,但经常崩溃。

我的应用程序所做的是,如果用户之前已经登录,它会自动转到默认的起始视图,并在该视图中,通过执行以下操作访问viewDidLoad中的Firebase数据库:

let messageDB = Database.database().reference().child("Messages")

正好:

let rootDB = Database.database().reference()

很好,但第一个崩溃了......但我需要第一个访问该特定组。还有其他方法可以解决这个问题吗?

修改

以下是已登录时进入默认视图的代码:

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil) // Get Main Storyboard
let page = mainStoryBoard.instantiateViewController(withIdentifier: "groups") as! GroupsViewController // Cast main storyboard as GroupsViewController

if let username = UserDefaults.standard.object(forKey: "username") {
    page.username = username as! String // Set saved username
}
window?.rootViewController = page // Set root view controller
window?.makeKeyAndVisible()

1 个答案:

答案 0 :(得分:0)

我发现了问题!它在这里:

if let username = UserDefaults.standard.object(forKey: "username") {
    page.username = username as! String // Set saved username
}

我使用了用户名字段来从数据库中获取当前用户的信息,并且由于在视图控制器实例化之后设置了用户名字段,因此在某些情况下设置用户名来自firebase之后引用,因此它将搜索ref.child("")。value()。