Как вывести словарь Firebase в UILabel Swift - PullRequest
1 голос
/ 31 января 2020

Я работаю над приложением заказа пиццы. Я пытаюсь загрузить порядок в UILabel в виде списка. База данных заказов - Firebase, и приложение быстро кодируется. Когда я печатаю значение массива, я вижу все элементы. Но список предметов не может быть загружен в UILabel. Просто загрузите ребенка по autoID сверху, игнорируя все остальные. Действительно, спасибо за вашу помощь, это мое первое приложение на swift и firebase, и, возможно, это глупый вопрос: (

Это дочерние элементы Firebase по autoID. Может только тот, кто наверху быть загруженным

Если я печатаю значения, работает отлично, но UILabel отображает только последний элемент.

func observePreOrder() {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let preOrderRef = Database.database().reference(withPath: "users/profile/\(uid)/pedidos/100_PRE-ORDER/")

    preOrderRef.observe( .value, with: {snapshot in

        if let Pedido = snapshot.value as? NSDictionary {

            let keys = Pedido.allKeys
            for key in keys {

                if let nextDict = Pedido[key] as? [String: Any] {

                    let Pizza = nextDict["PIZZA"] as? String ?? ""
                    let Ingredientes = nextDict["INGREDIENTES"] as? String ?? ""
                    let separator = " \n"
                    let array : [String?] = ["·Producto: \(Pizza)", nil, "·Ingredientes: \(Ingredientes)"]
                    let PedidoSTR = array.compactMap{ $0 }.joined(separator: separator)


                    self.testLabel.text = PedidoSTR// only display last item from Firebase
                    print(PedidoSTR)// Display ALL items from Firebase 
                    self.view.layoutIfNeeded()
                    self.testLabel.setNeedsDisplay()
                    self.testLabel.layoutIfNeeded()
                    print(self.testLabel.text as Any)



                }

            }

        } else {
            print("NANAIN")
        }
    })

}

Это вывод значение

· Продукт: Pepsi Cola Lata · Ingredientes: · Продукт: Mitad Ali oli??‍? y Mitad Boloñesa??‍? Pequeña. · Ingredientes: Mitad con + Base de Tomate + Моцарелла + Сальса Али Оли + Пимьенто Фрито + Хамон Серрано + Крем-де-Модена и Митад-кон + База Томатэ + Моцарелла + Сальса Болоньеса + Тернера + цеболла + Экстра де кесо

1 Ответ

0 голосов
/ 11 февраля 2020

У меня чуть больше обнаружена проблема

    func observePreOrder() {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let preOrderRef = Database.database().reference(withPath: "users/profile/\(uid)/pedidos/100_PRE-ORDER/")

    preOrderRef.observe( .value, with: {snapshot in

        if let Pedido = snapshot.value as? NSDictionary { // "\(Pedido)"load all items on UILabel??

            let keys = Pedido.allKeys // "\(keys)"load all keys on UILabel??
            for key in keys {  // "\(key)"load only last key on UILabel but all keys on print output?

                if let nextDict = Pedido[key] as? [String: Any] { // "\(nextDict)"Load only last item on UILabel but all items on print output?

                    let Pizza = nextDict["PIZZA"] as? String ?? ""
                    let Ingredientes = nextDict["INGREDIENTES"] as? String ?? ""
                    let separator = " \n"
                    let array : [String?] = ["·Producto: \(Pizza)", nil, "·Ingredientes: \(Ingredientes)"]
                    let PedidoSTR = array.compactMap{ $0 }.joined(separator: separator)


                    self.testLabel.text = "\(nextDict)"
                    self.orderTitle = self.testLabel.text

                    self.view.layoutIfNeeded()
                    self.testLabel.numberOfLines = 0
                    self.testLabel.setNeedsDisplay()
                    self.testLabel.layoutIfNeeded()
                    print(self.testLabel.text as Any)
                    print(array.count as Int)



                }

            }

        } else {
            print("NANAIN")
        }
    })

}
...