【发布时间】:2017-07-11 16:40:18
【问题描述】:
我想检索存储在用户存储中的图像,并将其放在自定义 UITableViewCell 中他的名字旁边。现在的问题是,当图像未完成下载(我认为?)时,tableview 将加载,导致应用程序崩溃,因为图像数组为 nil。那么加载tableview的正确方法是什么?我认为,为了用户体验,即使图像没有完成下载,也应该显示 tableviewcell 图像,并向它们呈现保存在助手中的默认图像,这一点很重要。我考虑过使用 UIImages 创建一个数组,该数组链接到加载图像的默认资产,并在下载完成后将图像更改为个人资料图片。但我真的不知道该怎么做。这是我到目前为止下载图像的结果:
let storage = FIRStorage.storage()
let storageRef = storage.reference(forURL: "link.appspot.com")
channelRef?.observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict{
let UIDs = each.value["userID"] as? String
if let allUIDS = UIDs{
let profilePicRef = storageRef.child((allUIDS)+"/profile_picture.png")
profilePicRef.data(withMaxSize: 1 * 500 * 500) { data, error in
if let error = error {
}
if (data != nil)
{
self.playerImages.append(UIImage (data: data!)!)
}
}
}
let userNames = each.value["username"] as? String
if let users = userNames{
self.players.append(users)
}
}
}
self.tableView.reloadData()
})
这是在 cellForRow 中
cell.playersImage.image = playerImages[indexPath.row] as UIImage
我的规则,没有从默认规则改变它:
service firebase.storage {
match /b/omega-towers-f5beb.appspot.com/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
谢谢。
【问题讨论】:
标签: ios swift uitableview firebase firebase-storage