从新Firebase

时间:2016-05-19 07:06:42

标签: xcode swift firebase

请帮忙。迁移到新的Firebase后,我无法检索数据。 使用这种结构:

let ref = FIRDatabase.database().reference()

override func viewDidLoad() {
    super.viewDidLoad()
    ref.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
        let postDict = snapshot.value as! [String : AnyObject]
        print("\(postDict)")
    })
}

跑完后我看到错误:

2016-05-19 10:04:22.264 123a[88652:13688922] The default app has not been configured yet.
2016-05-19 10:04:22.276 123a[88652:13688922] *** Terminating app due to uncaught exception 'MissingDatabaseURL', reason: 'Failed to get FIRDatabase instance: FIRApp object has no databaseURL in its FirebaseOptions object.'
*** First throw call stack:

我阅读了文档,但无法解决此问题。 GoogleService-Info.plist我添加到项目中。

9 个答案:

答案 0 :(得分:21)

我还没有看到这个答案,我不得不将配置调用添加到AppDelegate init方法。所以它看起来像:

override init() {
    super.init()
    // Firebase Init
    FIRApp.configure()
}

答案 1 :(得分:5)

有同样的问题。 我寻找与plist相关的链接问题,但这不是问题。 我想也许是因为我的初始视图控制器在配置完成之前被撤销了。 我通过试验来解决了这个问题。

我的初始视图控制器是:

    let ref = FIRDatabase.database().reference()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

我已经改变了这个:

    var ref = FIRDatabaseReference.init()

override func viewDidLoad() {
    super.viewDidLoad()
    ref = FIRDatabase.database().reference()

    // Do any additional setup after loading the view, typically from a nib.

}

崩溃已解决。

答案 2 :(得分:3)

所以,有了我的,我也在视图控制器被实例化时立即声明了一个ref。在应用程序代理中使用FIRApp.configure()配置应用程序后,我必须加载它。

在:

let serverRef = Firebase("firebaseURL")

后:

lazy var serverRef = FIRDatabase.database().reference()

这会延迟数据库引用的实例化,直到需要它为止,直到初始视图控制器上的viewDidLoad为止。

答案 3 :(得分:1)

基于@ColdLogic给出的答案,我遇到此错误的原因是因为我在视图控制器上的init方法中创建了Firebase数据库引用,在viewDidLoad方法中不是 。由于在应用程序启动时实例化的所有类的init方法在AppDelegate中被称为之前应用程序:DidFinishLaunchingWithOptions方法,因此导致此崩溃。移动这行代码:

class MyViewController {

   var firebaseRef: FIRDatabaseReference

   required init?(coder aDecoder: NSCoder) {
      ...
      firebaseRef = FIRDatabase.database().reference()
   }

   override func viewDidLoad() {
      ...
   }
}

到这里:

class MyViewController {

   var firebaseRef: FIRDatabaseReference

   required init?(coder aDecoder: NSCoder) {
      ...
   }

   override func viewDidLoad() {
      ...
      self.firebaseRef = FIRDatabase.database().reference()
   }
}

为我解决了这个问题。

答案 4 :(得分:1)

我也遇到了Firebase数据库的问题。通过添加

修复了它
import FirebaseDatabase

到我的代码

答案 5 :(得分:0)

今天遇到同样的问题,你需要在google-services.json上使用“firebase_url”:“https://xxxxxxxxxx.firebaseio.com”并为此执行此操作https://support.google.com/firebase/answer/7015592#android 如果您之前有一个来自谷歌云平台的文件,可能存在一些差异,您必须检查。对我来说这很有效。

答案 6 :(得分:0)

在我的情况下,我必须在调用超级applicationDidLaunch之前更改要调用的配置:

[FIRApp configure];

[super application:application didFinishLaunchingWithOptions:launchOptions];

答案 7 :(得分:0)

我收到此错误,直到我FIRApp.configure() AppDelegate

中的第一行didFinishLaunchingWithOptions

答案 8 :(得分:-1)

确保已从Firebase控制台下载fun.ymin = min文件,并将其添加到项目目录的根目录中。

添加后,请从AppDelegate中的GoogleService-Info.plist调用此函数:

didFinishLaunchingWithOptions

多数民众赞成,它应该启动并运行!