因此,我正在尝试下载一组图像以显示在我的应用程序的collectionview中。我将图像保存在firebase存储中,并将它们的url保存在数据库中每个项目节点中“ img”节点下的位置,并带有一个以该url为键的子“ storage”。
我首先创建一个空的UIImage数组:var somePicArray = [UIImage]()
,然后通过此功能将图片附加到该数组:
func test() {
let penis = Database.database().reference().child("kategorier").child("brus")
penis.observeSingleEvent(of: .value) { (snapshot: DataSnapshot) in
for item in snapshot.children {
let snap = item as! DataSnapshot
let imageSnap = snap.childSnapshot(forPath: "img/storage")
if let url = imageSnap.value as? String {
let someRef = self.storageRef.reference(forURL: url)
someRef.getData(maxSize: 10 * 10024 * 10024) { data, error in
if let error = error {
print(error)
} else {
let image = UIImage(data: data!)
self.testPicArray.append(image!)
self.collectionView?.reloadData()
}
}
}
}
}
}
直到“ if let url”行一切正常,因为我尝试在此if语句中打印url,并且它会完美地将所有url打印为字符串。
但是,我对第二部分的不确定性更高。我在应用程序的其他地方使用了此代码块来显示Firebase存储中的图片,效果很好。但是,它似乎在此功能中不起作用,并且我不确定自己在做什么错。
为了在单元格中显示图像,我尝试在collectionview cellforitematindexpath方法中使用以下代码:
cell.cellimage.image = somePickArray[2]
我只是在数组中选择了一个随机数,看是否可以显示任何图片,但是它崩溃了,这行的索引超出范围,我认为这是因为数组为空。
答案 0 :(得分:1)
当vc出现时,数组为空,所以
cell.cellimage.image = somePickArray[2]
在数组填充数据之前会崩溃,您需要确保这样做
return somePickArray.count
在numberOfItemsAtRow
内