swift - Firebase数据到tableview,附加数据后崩溃
问题描述
我正在尝试使用从 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, 新
但是,因为我想在 Tableview 中显示数据,所以我为数据模型创建了一个 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)
,它不会崩溃。
我究竟做错了什么?我显然错过了一些可行的东西,但我就是不知道是什么。我真的很想知道为什么附加数据不起作用......非常感谢您的帮助!
编辑:
完整的获取方法:
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!)")
}
}
}
}
解决方案
推荐阅读
- oracle - Explain Plan of Oracle With Clause 显示 Merge Join Cartesian
- jfrog-xray - JFrog X 射线试验有任何限制吗?
- java - Spring SimpleThreadScope 未在 @Components 上正确自动装配
- android - “libModule”中的实施项目“:app”不起作用
- javascript - 控制器中的Angularjs href
- docker - 构建 Docker 以构建单体应用程序
- android - 如何在应用程序的屏幕右上角最小化 youtubeplay,就像 youtube 一样?
- php - 苗条框架中的文件/图像验证请求验证
- python - 将 lambda 函数传递给 DataFrame.apply - 这里发生了什么?
- compression - 我们可以从 CRC 中获取消息吗