因此,我正在尝试下载一组图像以显示在我的应用程序的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]
[我只是在数组中选择了一个随机数,看是否可以显示任何图片,但是它崩溃时说这行的索引超出范围,我认为这是因为数组为空。
当vc出现时,数组为空,因此>
cell.cellimage.image = somePickArray[2]
将在数组填充数据之前崩溃,您需要确保这样做
return somePickArray.count
在
numberOfItemsAtRow
内部