Мне удалось правильно отобразить изображение, когда у меня есть только изображение в ViewController. Я использовал этот код:
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, но когда я пытаюсь получить к нему доступ в виде таблицы. Это говорит об ошибке: Поток 1: Неустранимая ошибка: Индекс выходит за пределы диапазона. Я не понимаю, почему мои другие массивы имеют значения, которые можно использовать, но этот массив делает. Я не думаю, что есть проблема с imageView, потому что я могу заменить изображения [indexPath.row] на мой PlaceholderImage, и он будет правильно показывать мое изображение-заполнитель.
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)
}
}
}
Если бы кто-то мог показать мне ошибку, которую я делаю, это было бы здорово. Я довольно новичок в спешке, поэтому любая помощь, которую вы можете оказать мне, будет принята с благодарностью. Я прочитал документацию Firebase и посмотрел их видео, но не могу понять, почему это работает в одном сценарии, а не в другом.