所以我的FirebaseApp.configure
函数中有application didFinishLaunchingWithOptions
。如果我一直在跑步和停止模拟器,它有时会崩溃,说:
由于未捕获的异常'InvalidPathValidation'而终止应用,原因:'(child :)必须是非空字符串且不包含'。' '#''$''['或']''
我做了我的研究,here和here。两者都说这是因为我在配置完成之前尝试访问数据库。前者通常比后者更好,但有时仍会崩溃,但经常崩溃。
我的应用程序所做的是,如果用户之前已经登录,它会自动转到默认的起始视图,并在该视图中,通过执行以下操作访问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()
答案 0 :(得分:0)
我发现了问题!它在这里:
if let username = UserDefaults.standard.object(forKey: "username") {
page.username = username as! String // Set saved username
}
我使用了用户名字段来从数据库中获取当前用户的信息,并且由于在视图控制器实例化之后设置了用户名字段,因此在某些情况下设置用户名来自firebase之后引用,因此它将搜索ref.child("")。value()。