我有一个桌面视图,我想填充firebase数据,也是我存储在存储中的图像。用Firebase数据库和存储填充tableview?
我最初的游戏计划是运行一个观察者到firebase,并为快照中的每个项目填充一个firebase数据数组,并从存储中以相同的捕捉名称提取数据,并将它放在另一个数组中,然后在我的单元格中,我会用图像数组的indexpath.row和数据数组中的数据填充图像,它会匹配起来并变得很酷。
这次崩溃和烧毁是因为从存储下载图像我想花费的时间比拉动信息长?和图像数组被填充比数据慢,所以我得到一个崩溃,图像[indexPath.row]超出范围。
从数据库和存储中填充tableview的正确方法是什么?
编辑:
我的火力点的数据是这样的:
users
02938409283049829304
Category
Cats : true
Dogs: true
这就是我要怎样做:
REF_USERS.child(currentUserUID).child("Category").observeEventType(.Value) { (snapshot: FIRDataSnapshot) in
self.categoriesArray = []
self.imagesArray = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
self.categoryArray.append(snap.key)
let pictureRef = DataService.ds.REF_BASE_STORAGE.child(self.currentUserUID).child(String(snap.key))
pictureRef.dataWithMaxSize(9809898999098098 /* no idea what to put here*/) { (data, error) -> Void in
if (error != nil) {
print(error)
} else {
let picture : UIImage! = UIImage(data: data!)
self.imagesArray.append(picture)
print(self.imagesArray.count)
}
}
self.tableView.reloadData()
所以,我怎么想的是读取是:
转到用户并查看他们的类别。我期待发布它的名称,所以我只是使用密钥。密钥名称与保存在存储器中的图像完全相同,因此我使用该密钥名称从存储器中抓取照片。
let pictureRef = DataService.ds.REF_BASE_STORAGE.child(self.currentUserUID).child(String(snap.key))
我从数据库中的阵列和从存储到另一个阵列将图像添加数据,然后当我使细胞我只设置数据,以将图像数据[indexPath.row]和图像[indexPath.row]。当我做images.count和data.count,并且我有两件事情时,我的图片落后3,所以这就是我得到的图像[indexPath.row]超出范围错误我猜。
确实没有一个正确的方法;有几条路要走。这很大程度上取决于您的Firebase结构中的数据和图像。你可以将它作为文本包含在你的问题中吗? – Jay
@Jay Yep它现在在那里。我不知道我是不是这样做的基础。我只会一次向用户显示最多10张照片,所以我想我可能不需要处理缓存?任何指导表示赞赏,谢谢你。 – Noowoo