【发布时间】:2017-05-29 23:42:59
【问题描述】:
问题:见video。我正在从 Firebase 存储下载图像并显示在表格视图单元格上。构建应用程序后,图像不会显示在表格视图的第一个单元格中。向下和向上滚动时,我可以在表格视图的第一个单元格中看到图像。
我咨询了这个question(清除应用程序数据和模拟器缓存不起作用)和这个question(不同的问题b / c他们从url下载图像)。我阅读了this 关于使用占位符图像的信息,但我不确定它是否适用,因为我没有使用 SDWebImage 并且我的单元使用我自己的companyImage UIImageView 而不是@987654328 附带的imageView @细胞。
代码:
公司视图控制器:
class CompanyViewController: UIViewController, UISearchBarDelegate, UIScrollViewDelegate, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
companyTableView.register(CompanyTableViewCell.self, forCellReuseIdentifier: "CompanyTableViewCell")
companyTableView.register(UINib(nibName: "CompanyTableViewCell", bundle: nil), forCellReuseIdentifier: "CompanyTableViewCell")
loadData()
}
func loadData() {
databaseHandle = databaseRef?.child("companies").observe(.value, with: { (snapshot) in
for item in snapshot.children.allObjects as! [FIRDataSnapshot] {
let company = Company()
let id = item.childSnapshot(forPath: Property.id.rawValue).value as! String
let imageName = id + ".png"
let imageRef = self.storageRef?.child(imageName)
imageRef?.data(withMaxSize: 1 * 1024 * 1024) { data, error in
if let error = error {
print((error as Error).localizedDescription)
} else if let data = data {
// Data for "images/companyid.png" is returned
company.image = UIImage(data: data)
}
}
self.informationStateController?.addCompany(company: company)
}
DispatchQueue.main.async {
self.companyTableView.reloadData()
}
})
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let company = (self.informationStateController?.companies[indexPath.row])!
let customCell = tableView.dequeueReusableCell(withIdentifier: CompanyTableViewCell.identifier) as! CompanyTableViewCell
customCell.companyImage.image = company.image
return customCell
}
}
公司表视图单元格
class CompanyTableViewCell: UITableViewCell {
@IBOutlet weak var companyImage: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
companyImage.contentMode = .scaleAspectFit
}
}
【问题讨论】:
-
欢迎回来。您是否至少尝试过使用占位符图像?如果该解决方案适用于
SDWebImage,它应该仍然适用于此处。我至少建议尝试一下看看会发生什么。 -
您是否尝试过调试
company.image在第一个屏幕加载时是否在tableView:cellForRowAt:函数中返回任何内容? -
哦,好吧,我只是这样做了,对于第一个屏幕加载,所有七个单元格的图像都返回
nil,但是当我向下滚动并向上滚动时,我得到Optional(<UIImage: 0x6080002876c0>, {1998, 496}), @987654336 @等 -
您是否尝试过您所链接的问题的答案所说的仅删除应用程序并重新安装它?
-
顺便说一句,如果您从
.xib文件加载单元格,请删除第一行registercompanyTableView.register(CompanyTableViewCell.self, forCellReuseIdentifier: "CompanyTableViewCell")。你只需要第二个
标签: ios swift uitableview uiimage firebase-storage