Firebase данных в табличном виде, сбой после добавления данных - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь загрузить данные из Firebase, используя

firebaseDB.observe(DataEventType.value, with: { (snapshot) in })

, который работает хорошо. Я могу получить следующие данные:

let fetchedObject = items.value as? [String: AnyObject]
let dbUrl = fetchedObject?["url"]
let dbTime = fetchedObject?["time"]
let dbStatus = fetchedObject?["status"]

Используя print("\(dbUrl!), \(dbTime!), \(dbStatus!)"), я вижу следующий вывод в консоли:

https://google.de, 2019-04-26 07:44:54 +0000, новый

Однако, поскольку я хочу показать данные в виде таблицы, я создал файл swift для модели данных, который называется ItemModel со следующим содержанием:

class ItemModel {

    var url: String?
    var time: String?
    var status: String?

    init(url: String?, time: String?, status: String?){

        self.url = url
        self.time = time
        self.status = status

    }
}

При попытке заполнить URL, время и статус, используя

let item = ItemModel(url: dbUrl as! String?, time: dbTime as! String?, status: dbStatus as! String?)

добавив его с помощью self.itemList.append(item) и перезагрузив таблицу с помощью self.tableViewOutlet.reloadData(), приложение вылетает.

Если я закомментирую self.itemList.append(item), он не вылетит.

Что я делаю не так? Я явно скучаю по чему-то жизнеспособному, но я просто не могу понять, что. Мне действительно интересно, почему добавление данных не работает ... Большое спасибо за любую помощь!

EDIT:

Полный метод извлечения:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var itemList = [ItemModel]()

override func viewDidLoad() {

        super.viewDidLoad()

        [...]

        // Authenticate user
        Auth.auth().signInAnonymously() {(authResult, error) in

            if error == nil {

                self.user = authResult!.user // Authenticate User
                self.uid = self.user.uid // Users unique and anonymous identifier by Firebase
                print(">> LOG: Auth success!")

                // Download data from Firebase
                var itemsDB: DatabaseReference!
                itemsDB = Database.database().reference().child("somechild").child("someotherchild")
                itemsDB.observe(DataEventType.value, with: { (snapshot) in

                    // Check if there is any relevant data
                    if snapshot.childrenCount > 0 {

                        // Initially clear the list
                        self.itemList.removeAll()

                        // Interate through all the values
                        for items in snapshot.children.allObjects as! [DataSnapshot] {

                            // Get the values from Firebase
                            let fetchedObject = items.value as? [String: AnyObject]
                            let dbUrl  = fetchedObject?["url"]
                            let dbTime = fetchedObject?["time"]
                            let dbStatus = fetchedObject?["status"]

                            let item = ItemModel(url: dbUrl as? String, time: dbTime as? String, status: dbStatus as? String)
                            print("\(item.url!), \(item.time!), \(item.status!)")
                            self.itemList.append(item)

                        }

                        // Reload the Tableview
                        self.tableViewOutlet.reloadData()
                    }
                })

            } else {

                print(">> LOG: Error when trying to authenticate: \(error!)")

            }

        }

    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...