2016-05-19 2 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 инициализации , Таким образом, это выглядит так:

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

Это решило проблему для меня, спасибо! –

+0

Спасибо! Документация google охватывает только сборку pod, которую я не предпочитаю. – DazChong

0

Если бы та же проблема сегодня, вам нужно «firebase_url»: «https://xxxxxxxxxx.firebaseio.com» на Google-services.json и для этого сделать шаги https://support.google.com/firebase/answer/7015592#android Если у вас один файл из Google облачной платформы раньше, может быть, есть некоторые различия и вы должны проверить. Для меня это работает.

+0

Было бы лучше включить соответствующие части из ссылок (-ов) в ответ. Ссылки могут исчезнуть. – zx485

+0

Я установил ключ «firebase_url» в файле google plist, но это не помогло мне –

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() после приложения: application didFinishLaunchingWithOptions: метод launchOptions в AppDelegate. Но это не помогло мне –

3

Итак, с моим, у меня также было объявление ref сразу после того, как был создан экземпляр контроллера представления. Я должен был загрузить его после того, как приложение было настроено в делегате приложения с помощью FIRApp.configure().

До:

let serverRef = Firebase("firebaseURL") 

После:

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

Это задерживает создание экземпляра справки базы данных до его необходимости, что обыкновение быть до viewDidLoad в исходный контроллер представления.

0

Я получаю эту ошибку, пока я не сделал FIRApp.configure() первую строчку в AppDelegatedidFinishLaunchingWithOptions

1

Чтобы построить на ответ дается @ColdLogic, причина у меня была эта ошибка, потому что у меня была справочная база данных Firebase создается в методе init на контроллере представления, не в методе viewDidLoad. Поскольку методы init для всех классов, которые создаются при запуске приложения, называются до приложением: DidFinishLaunchingWithOptions в приложении AppDelegate, это вызывало этот сбой.Двигаясь эту строку кода:

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

Убедитесь, что вы загрузили файл GoogleService-Info.plist с консоли Firebase и добавили его в корневой каталог вашего проекта.

После того, как вы добавили его вызвать эту функцию из didFinishLaunchingWithOptions в AppDelegate:

FIRApp.configure() 

Вот, он должен быть запущен!

+0

@jankigadhiya Я не могу найти здесь новый вопрос, ответ выглядит нормально –

+0

@jankigadhiya это не должно быть проголосовано. Спасибо egor.zhdan за ваш ответ здесь. –

+0

@JunaidMukhtar Я не забыл и сожалею о комментарии –

1

У меня также была проблема с базой данных Firebase. Фиксированный, добавив

import FirebaseDatabase 

в мой код

Смежные вопросы