我正在try 将我的应用升级到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.'

我在AppDelegate中有FIRApp.configure()个,我有谷歌服务信息.plist导入到我的项目中.plist也有所有正确的信息.还有谁遇到这个问题或者知道怎么解决吗?

推荐答案

以下是你问题的答案:

你必须在某个地方配置Firebase FIRApp.configure().完成后,可以使用let firebaseDatabaseReference = FIRDatabase.database().reference()获取对该数据库的引用并开始使用它.问题不在于Firebase本身,而在于Swift的行为.

如果在AppDelegate func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool中放入FIRApp.configure(),然后在MyDatabase class中使用let firebaseDatabaseReference = FIRDatabase.database().reference() outside个已声明函数sometimes,则代码FIRDatabase.database().reference()在执行application didFinishLaunchingWithOptions函数之前执行.

基本上,您的类正在try 获取对Firebase数据库before的引用,它有机会自行配置,并在控制台中生成错误"默认应用尚未配置"

Note: This doesn't happen all the time, sometimes the application is slow to start, in iOS Simulator for example, and it doesn't have a chance to finish before MyDatabase "let" executes and tries to get a reference.

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

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

还要确保你超棒.init().

Swift相关问答推荐

Swift中可以取消的延迟任务

如何在Swift中获得与Python相同的HMAC—SHA512签名?

如何禁用MacOS上SwiftUI中按钮周围的聚焦环(或高亮显示)?

是否可以将具有关联值的枚举强制转换为其类型与关联值匹配的变量?

Swift通过设置变量B自动设置变量A的值

SwiftData:非法try 在不同上下文中的对象之间建立关系

当模式以编程方式关闭时在父视图控制器中触发操作

为什么无法在 Swift 中使用AVFoundation扫描 QRCode

在 Swift 的异步上下文中,如何指示我想要函数的同步版本?

从 Int 到 String 的属性更改引发 SwiftUI 视图不更新

Vapor 4 身份验证问题 [用户未通过身份验证]

无法分配给属性:absoluteString是一个只能获取的属性

如何获取 NSRunningApplication 的参数?

无法从自定义动态框架(Swift)访问类

Swift - 获取本地日期和时间

Swift 中的 PageViewController 当前页面索引

DispatchQueue:不能在非主线程上使用 asCopy = NO 调用

两个 Date 对象之间的所有日期 (Swift)

Objective-C 方法与可选需求方法 Swift 冲突

Switch 语句中的字符串:String不符合协议IntervalType