2016-05-19 95 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 

我的代碼固定它