tableView
からUIViewController
にUIImageView
を渡すことができません。別のビューに画像を渡すことができません(非同期を取得した後)
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
を移入方法は次のとおりです:画像をダウンロードする方法がある画像は、テーブルビューに表示されているが、私は、他のビューに渡すしようとすると、それはnil
を取得します
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]
iはそれぞれのオブジェクトにUIImage
を渡す方法です。
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のようなものを使用することをお勧めします。それはキャッシングを提供するので、2番目のビューコントローラでイメージをもう一度ダウンロードすることができます。すでにダウンロードされている場合は、キャッシュから取得されます。 – Paulw11
最初に、すべてのイメージを配列に格納し、ダウンロードしたパスを使用します。 – CodeChanger
コメントありがとうございます!実際、画像は 'Product'のプロパティに格納されています。配列はちょうど 'Product'タイプ –