У меня не может быть изображения, отображаемого в detailViewController, который я извлекаю из базы данных firebase.
Я пытался решить его, рассматривая другие примеры, такие как приведенный ниже, но не смог получить егоза работой. (iOS + Firebase) Невозможно передать изображение следующему ViewController из UITableViewCell
Это мой сервис изображений:
import Foundation
import UIKit
import IHProgressHUD
class ImageService {
static let cache = NSCache<NSString, UIImage>()
static func downloadImage(withURL url:URL, completion: @escaping (_ image:UIImage?, _ url:URL)->()) {
let dataTask = URLSession.shared.dataTask(with: url) { data, responseURL, error in
var downloadedImage:UIImage?
if let data = data {
downloadedImage = UIImage(data: data)
}
if downloadedImage != nil {
self.cache.setObject(downloadedImage!, forKey: url.absoluteString as NSString)
}
DispatchQueue.main.async {
completion(downloadedImage, url)
IHProgressHUD.dismiss()
}
}
dataTask.resume()
}
static func getImage(withURL url:URL, completion: @escaping (_ image:UIImage?, _ url:URL)->()) {
if let image = cache.object(forKey: url.absoluteString as NSString) {
completion(image, url)
} else {
downloadImage(withURL: url, completion: completion)
}
}
}
Так я создаю свойcollectionViewCell
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView === self.vegatableCollectionView {
let productCell = collectionView.dequeueReusableCell(withReuseIdentifier: "vegatable", for: indexPath) as! MainCollectionViewCell
productCell.set(cell: veggies[indexPath.row])
if let productImageURL = cell?.productImageURL {
cell?.productImageURL = productImageURL
}
return productCell
}
Вот что происходит, когда я выбираю ячейку:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if collectionView == self.vegatableCollectionView {
performSegue(withIdentifier: "showVegetableDetail", sender: veggies[indexPath.item])
}
}
Вот как я обращаюсь:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showVegetableDetail" {
let destination = segue.destination as! VegetableDetailViewController
destination.selectedProduct = sender as! Product
}
}
И, наконец, это мой detailViewController:
var veggies = [Product]()
var veggieRef: DatabaseReference?
var selectedProduct: Product?
weak var cell:Product?
@IBOutlet weak var headerTitle: UILabel!
@IBOutlet weak var itemDescription: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
getTheData()
}
func getTheData() {
headerTitle.text = selectedProduct?.productName
itemDescription.text = selectedProduct?.productDescription
}
}
Я просто хочу получить изображение из базы данных и показать его в detailViewController.