2016-11-09 4 views
1

My structureНе удается получить значение узла в Firebase

Я прочитал много примеров, и большинство из них имеют старый стиль (даже они написаны в текущем году). Пожалуйста, помогите понять, где мой код неправильный? Он построен, но я не могу получить значение 123456.

import UIKit 
import Firebase 

class ViewController: UIViewController { 
    @IBOutlet weak var val_txt: UITextField! 
    let ref = FIRDatabase.database().reference() 
    var barcode = 0 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    FIRAuth.auth()?.signIn(withEmail: "*****@gmail.com", password: "*****", completion: {(user,error) in print("Авторизация Ок!!!")}) 

    } 
    @IBAction func getData_btn(_ sender: Any) { 
    ref.child("goods").child("1").observe(FIRDataEventType.value, with: {(snapshot) in 
    let postDict = snapshot.value as? [String:AnyObject] ?? [:] 
    print(postDict["barcode"] as? Int) 
    }) 
    print(barcode) 
} 

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

print("Method started") 
ref.child("goods").child("1").observe(FIRDataEventType.value, with:{(snapshot) in 
    let postDict = snapshot.value as? [String:AnyObject] ?? [:] 
    print("Method is executing") 
    }) 
    print("Method completed") 

И я получаю только два ряда печатных

"Method started" 
"Method completed" 
+0

Сообщение Изображение вашей структуры бомбы –

+0

готов в ссылке моя структура – LEONID

+0

После обновления выше комментария Это sa ys me "класс ViewController не имеет инициализаторов", а в viewDidLoad появилась ошибка: "ожидаемое выражение" – LEONID

ответ

2

Если вы хотите значение только для "1":

var ref: FIRDatabaseReference! 
ref = FIRDatabase.database().reference() 
ref.child("goods").child("1").observeSingleEvent(of: .value, with: { (snapshot) in 
      let id = snapshot.childSnapshot(forPath: "barcode") 
      print(id) 
     }) 

, но если вы хотите, чтобы все штрих-коды:

var ref: FIRDatabaseReference! 
    ref = FIRDatabase.database().reference() 
    ref.child("goods").observeSingleEvent(of: .value, with: { (snapshot) in 
     if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 

      for snap in snapshots 
      { 
       let barcode = snap.childSnapshot(forPath: "barcode").value! as! String 
       print(barcode) 
      } 
     } 
    }) 
+0

спасибо, что это работает :)))) – LEONID

+0

@LeonifNif Примите этот ответ, если он сработает! – Jay

+0

Спасибо, парень! Ты спас меня в день! – Viny76

1

в коде let ref = FIRDatabase.database().reference() не указывают на ссылку URL, потому что во время инициализации вашей firebase не настроить в файле делегата приложения (не называется FIRApp.configure()).

Так положить в func viewDidLoad() следующим образом:

import UIKit 
import Firebase 

class ViewController: UIViewController { 
    @IBOutlet weak var val_txt: UITextField! 
    let ref:FIRDatabaseReference! 
    var barcode = 0 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    ref:FIRDatabaseReference = FIRDatabase.database().reference() 
    FIRAuth.auth()?.signIn(withEmail: "*****@gmail.com", password: "*****", completion: {(user,error) in print("Авторизация Ок!!!")}) 

    } 
+0

Unfortunatelly, does not work :( – LEONID

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