Я не могу пройти UIImageView
от tableView
до UIViewController
. Изображение отображается в TableView, но когда я пытаюсь перейти к другому представлению, он получает nil
Невозможно передать изображение в другое изображение (после получения async)
метод, чтобы загрузить изображение является:
func loadImageFromUrl(url: String, view: UIImageView){
// Create Url from string
let url = NSURL(string: url)!
// Download task:
// - sharedSession = global NSURLCache, NSHTTPCookieStorage and NSURLCredentialStorage objects.
let task = URLSession.shared.dataTask(with: url as URL) { (responseData, responseUrl, error) -> Void in
// if responseData is not null...
if let data = responseData{
// execute in UI thread
DispatchQueue.main.async {
view.image = UIImage(data: data)
}
}
}
// Run task
task.resume()
}
И вот как я заселить мой tableView
:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("UIProductTableViewCell", owner: self, options: nil)?.first as! UIProductTableViewCell
cell.selectionStyle = .none
//Populating data
cell.descriptionLabel.text = catalogOfProducts[indexPath.row].name
cell.priceLabel.text = catalogOfProducts[indexPath.row].regularPrice
if (catalogOfProducts[indexPath.row].productImageURL == "") {
cell.productImageView.image = UIImage(named: "noImage")
}else{
loadImageFromUrl(url: catalogOfProducts[indexPath.row].productImageURL!, view: cell.productImageView)
}
catalogOfProducts[indexPath.row].productImage = cell.productImageView.image
return cell
}
catalogOfProducts[indexPath.row]
как я передать UIImage
к соответствующему объекту.
Чтобы передать данные через Segue, я просто передать Product
объект:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "productDetailSegue", sender: catalogOfProducts[indexPath.row])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let productDetailViewController = segue.destination as! ProductDetailViewController
productDetailViewController.featuredProduct = (sender as? Product)!
}
Я предлагаю вам использовать что-то вроде SDWebImage. Он обеспечивает кэширование, поэтому вы можете просто загрузить изображение снова во втором контроллере представления, и оно будет поступать из кеша, если оно уже было загружено – Paulw11
прежде всего неправильным способом хранения всего изображения в массиве и передачи определенного изображения в другое представление, которое у вас есть использовать путь, где его скачали. – CodeChanger
благодарит за ваш комментарий! На самом деле изображение хранится в свойстве «продукта». Массив просто хранит типы 'Product' –