【发布时间】:2020-07-19 03:20:39
【问题描述】:
当我在 ViewController 中只有一个 imageView 时,我能够正确显示图像。我使用了这段代码:
islandRef.getData(maxSize: 1 * 1024 * 1024) { [weak self] data, error in
if let error = error {
print((error.localizedDescription))
// Uh-oh, an error occurred!
}
if let data = data{
self?.imageItem.image = UIImage(data: data)
}
}
}
我为我的 tableView 尝试了类似的方法,但它有点复杂。我有两个数组,它们从我的 firebase 文档中提取一个字符串和一个整数。我将这些附加到数组项目和价格中。我能够在我的 tableView 中显示这些值。当我的图片数组时,我尝试同样的事情。我可以将图像附加到它。然后我检查图片数组是否有计数。它的计数为 1,但是当我尝试在 tableview 中访问它时。它说错误:线程1:致命错误:索引超出范围。我不明白为什么我的其他数组有可用的值,但这个数组有。我不认为 imageView 有问题,因为我可以用我的 PlaceholderImage 替换图片[indexPath.row],它会正确显示我的占位符图像。
class ProfileViewController: UITableViewController {
var item = [String]()
var prices = [Int]()
var pricePicture = [Any]()
var db:Firestore!
var pictures = [UIImage]()
let storage = Storage.storage()
var placeholderImage = UIImage(named: "placeholder.jpg")
var imageMenu:UIImage?
override func viewDidLoad() {
getData()
let db = Firestore.firestore()
super.viewDidLoad()
}
func getData(){
let db = Firestore.firestore()
let docRef = db.collection("wine").document("pinot-noir-2017")
let storage = Storage.storage()
docRef.getDocument(source: .server) { (document, error) in
if let document = document {
let keys = document.data()?.keys
for key in keys!{
self.item.append(key)
self.pricePicture = document.data()![key] as! [Any]
self.prices.append(self.pricePicture[0] as! Int)
let stor = storage.reference()
let islandRef = stor.child("carbanet.jpg")
islandRef.getData(maxSize: 1 * 1024 * 1024) { [weak self] data, error in
if let error = error {
print((error.localizedDescription))
}
if let data = data{
self?.pictures.append(UIImage(data: data)!)
//this will print 1
print(self?.pictures.count ?? 0)
}
}
self.tableView.reloadData()
}
} else {
//print("Document does not exist in cache")
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return item.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Picture", for: indexPath)
cell.textLabel?.text = item[indexPath.row] + " $" + String(prices[indexPath.row])
cell.imageView?.image = pictures[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let detailViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.detailViewController) as? DetailViewController{
show(detailViewController, sender: .none)
}
}
}
如果有人能告诉我我正在犯的错误,那就太好了。我对 swift 很陌生,所以你能给我的任何帮助将不胜感激。我已经阅读了 firebase 文档并观看了他们的视频,但我不明白为什么它在一种情况下有效,而在另一种情况下无效。
【问题讨论】:
标签: ios swift firebase google-cloud-firestore firebase-storage