Извлечение данных из новой 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 ответов


Я еще не видел этого ответа, мне пришлось добавить вызов configure в метод init AppDelegate. Так это выглядит:

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

была та же проблема. Я искал проблемы, связанные с 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.

}

авария устранена.


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

перед:

let serverRef = Firebase("firebaseURL")

после:

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

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


построить на ответ @ColdLogic, почему у меня эта ошибка была, потому что у меня огневая база справочная база данных создается в 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()
   }
}

решил проблему для меня.


У меня тоже была проблема с базой данных военнослужащих. Исправлено путем добавления

import FirebaseDatabase

мой код


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


в моем случае мне пришлось изменить настройку для вызова перед вызовом super applicationDidLaunch:

[FIRApp configure];

[super application:application didFinishLaunchingWithOptions:launchOptions];

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


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

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

FIRApp.configure()

вот он, стоит и работает!