別のView Controllerにある別のimageView.imageに画像を追加しようとしていますが、segueの準備をしていますが、 bgのスレッドでは、それを更新するためにメインスレッドにホップ、それは動作しません。しかし、私が発送物を取り除くと、それは機能します。コードは次のとおりです。segueを実行するときにメインスレッドでUIが更新されない
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
SwiftSpinner.show(progress: 0.2, title: "Loading full image, please wait...")
let vc = segue.destination as! PhotoViewController
let cell = sender as! UICollectionViewCell
DispatchQueue.global(qos: .background).async {
if let indexPath = self.collectionView?.indexPath(for: cell) {
let url = URL(string: self.images[indexPath.row].rawURL)
let imageData = NSData(contentsOf: url!)
let image = UIImage(data: imageData as! Data)
DispatchQueue.main.async {
vc.image = image!
vc.mainImage = image!
vc.photographerName = self.images[(indexPath.row)].photographerName
SwiftSpinner.hide()
}
}
}
}
バックグラウンドスレッドのコレクションビューにアクセスしようとしている場合、私は驚くことはありませんが、このアプローチでは心配しないでください。代わりに、PhotoViewControllerへのURLを渡す必要があります。イメージをダウンロードする必要があります。これはprepareForSegueメソッドで行うべきではありません。 – dlbuckley
申し訳ありませんが、DispatchQueue.globalとDispatchQueue.main.asyncを削除すると、なぜ動作するのですか? –
おそらく、あなたがメインスレッドのcollectionViewにアクセスしているからです。上記の私の答えを参照してください;) – dlbuckley