2016-05-19 51 views
7

请帮忙。迁移到新的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我添加到项目中。

+0

你使用FIRApp.configure()之前? –

+1

@ GabrieleMariotti是的,当然是 –

回答

21

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

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

这解决了我的问题,谢谢! –

+0

谢谢!谷歌文档只涵盖了我不喜欢的pod构建。 – DazChong

0

今天有同样的问题,你需要“firebase_url”:“https://xxxxxxxxxx.firebaseio.com”在谷歌,services.json并为做这个步骤https://support.google.com/firebase/answer/7015592#android 如果您已经从之前谷歌云平台一个文件,可能存在一定的差异你必须检查。对我来说这是有效的。

+0

将链接中的相关部分包含在答案中会更好。链接可能会消失。 – zx485

+0

我在谷歌plist文件中设置了键“firebase_url”,但是这对我没有帮助 –

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. 

} 

崩溃解决。

+0

这种方法解决了崩溃问题,但我没有从Firebase中获取数据 –

+0

这些解决方案都不适用于我。我尝试了其中的每一个。并继续得到相同的错误。 – Chris

+0

同样的问题在这里克里斯。你有没有解决它? – RJH

0

在我来说,我不得不改变配置被称为调用超级applicationDidLaunch前:

[FIRApp configure]; 

[super application:application didFinishLaunchingWithOptions:launchOptions]; 
+0

我使用Swift。并在我的项目中设置了应用程序后的FIRApp.configure():AppDelegate中的应用didFinishLaunchingWithOptions:launchOptions方法。但是这并不能帮助我 –

3

所以,与我的,我也有裁谈会视图控制器实例化时立即宣布。我不得不在应用程序代理中配置该应用程序后,才能加载该应用程序,并使用FIRApp.configure()

前:

let serverRef = Firebase("firebaseURL") 

后:

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

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

0

,直到我做了FIRApp.configure()AppDelegatedidFinishLaunchingWithOptions

1

第一线,建立由@ColdLogic,我有这个错误是因为我正在创建我的火力地堡数据库引用的原因给出了答案,我得到这个错误在视图控制器的初始化方法中,在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() 
    } 
} 

解决了这个问题对我来说。

-1

确保您已从Firebase控制台下载GoogleService-Info.plist文件并将其添加到项目目录的根目录中。

一旦你添加了它didFinishLaunchingWithOptions在AppDelegate中调用这个函数:

FIRApp.configure() 

完蛋了,它应该是启动和运行!

+0

@jankigadhiya我似乎无法在这里找到一个新问题,答案看起来不错 –

+0

@jankigadhiya这不应该被放弃投票。感谢egor.zhdan在这里的回复。 –

+0

@JunaidMukhtar我没有downvoted&对评论感到抱歉 –

1

我也对Firebase数据库有问题。加入

import FirebaseDatabase 

我的代码固定它