【问题标题】:firebase / swift 4 - wait until firebase is done configuringfirebase / swift 4 - 等到 firebase 完成配置
【发布时间】:2018-09-09 01:42:42
【问题描述】:

所以我的application didFinishLaunchingWithOptions 函数中有FirebaseApp.configure。如果我一遍又一遍地运行和停止模拟器,它有时会崩溃,说:

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

我做了我的研究,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()

【问题讨论】:

  • 我不确定您是如何得出结论的。您链接的第一个问题是关于配置,但没有提到您得到的错误。您链接的第二个问题包含错误,但没有在任何地方提及配置。您似乎更有可能在某个地方使用未初始化的参数调用 child()
  • 您的参考可能缺少正确的连接fromURL: “yourfirebaseprojecturl”)

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 2017-09-10
    • 2020-09-28
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多