一尘不染

默认应用尚未配置

swift

我正在尝试将我的应用程序升级到新版本的Firebase。我仔细阅读了设置指南,并编辑了所有代码以匹配新语法。但是,当我运行该应用程序时,出现了这两个错误。

The default app has not been configured yet.
Terminating app due to uncaught exception 'MissingDatabaseURL', reason: 'Failed to get FIRDatabase instance: FIRApp object has no databaseURL in its FirebaseOptions object.'

FIRApp.configure()在AppDelegate中,并将GoogleServices-
Info.plist导入到我的项目中。plist也具有所有正确的信息。其他人遇到这个问题或知道如何解决?


阅读 324

收藏
2020-07-07

共1个答案

一尘不染

这是您的问题的答案:

要配置Firebase,您必须在某处执行 FIRApp.configure() 。完成此操作后,可以使用 let
firebaseDatabaseReference = FIRDatabase.database()。reference()

获取对该数据库的引用并开始使用它。问题不在于Firebase本身,而在于Swift的行为方式。

如果您放入FIRApp.configure()AppDelegate func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool,然后在声明的函数 之外MyDatabase class使用,则 有时 代码
在函数执行之前执行。let firebaseDatabaseReference = FIRDatabase.database().reference()
____FIRDatabase.database().reference()``application didFinishLaunchingWithOptions

本质上,您的班级试图在对Firebase数据库进行配置 之前 对其进行引用,从而在控制台中生成错误“尚未配置默认应用程序”。

注意:例如,在iOS Simulator中,这种情况并非一直发生,有时应用程序启动速度很慢,并且MyDatabase“
let”执行并尝试获取引用之前没有完成的机会。

这就是为什么移动FIRApp.configure()代码以覆盖AppDelegate中的init()的原因,从本质上讲,它确保在初始化AppDelegate时(在这种情况和大多数情况下,在初始化MyDatabase之前)执行配置代码。

override init() {
   super.init()
   FIRApp.configure()
   // not really needed unless you really need it FIRDatabase.database().persistenceEnabled = true
}

还要确保您拥有super.init()(这样,您的超类便会获得“消息”),因此重写不会带来多大的弊端。

2020-07-07