Я пытаюсь загрузить данные из 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!)")
}
}
}
}