2016-12-08 4 views
0

ここまでは私が持っているコードです。私は非常に新しいので、私と一緒に裸をしてください。RxSwiftとAlamofireを使ってイメージをダウンロードするには?

画像を読み込んだ後にスクロールしようとすると、画像に問題が発生します。

表示されている間違ったイメージについて調べました。読み込まれたイメージをキャッシュしなければならないと思います。これは標準的な方法ですか?

私はAndroidにはかなり堪能ですが、私は確かにフレスコ/ピカソのライブラリは、これは私がiOSではないと思うことは確かです。

誰かが正しい方向に向かうことができますか?あなたが何かをダウンロードすると

はAlamofireで、たとえば、あなた

class PostTableViewCell: UITableViewCell { 

    @IBOutlet weak var fileView: UIImageView! 

    @IBOutlet weak var messageLabel: UILabel! 

    let disposeBag = DisposeBag() 

    var postViewModel: PostViewModel? { 
     didSet { 
      guard let pvm = postViewModel else { 
       return 
      } 

      Alamofire.request(pvm.file).responseImage{ response in 
       if let image = response.result.value { 
        self.fileView.image = image 
        self.fileView.setNeedsLayout() 
       } 
      } 

      pvm.messageText.bindTo(messageLabel.rx.text).addDisposableTo(disposeBag) 
     } 
    } 
} 

class PostViewModel { 
    private let post: Post 
    let disposeBag = DisposeBag() 

    var fileText: BehaviorSubject<String> 
    var messageText: BehaviorSubject<String> 

    var file: String { 
     return post.file! 
    } 

    init(post: Post) 
    { 
     self.post = post 
     fileText = BehaviorSubject<String>(value: post.file!) 
     fileText.subscribe(onNext: {(file) in 
      post.file = file 
     }).addDisposableTo(disposeBag) 

     messageText = BehaviorSubject<String>(value: post.message!) 
     messageText.subscribe(onNext: {(message) in 
      post.message = message 
     }).addDisposableTo(disposeBag) 
    } 
} 
+0

リンク先(https://github.com/Alamofire/AlamofireImage)をご覧ください。 –

答えて

1

ありがとうございます。あなたはメインスレッドを外しています(これは非同期ジョブです)。データを取得したら、メインスレッドに再度プッシュする必要があります。

あなたが試してみました:

Alamofire.request(pvm.file).responseImage{ response in 
    DispatchQueue.main.async { 
     if let image = response.result.value { 
      self.fileView.image = image 
      self.fileView.setNeedsLayout() 
     } 
    } 
} 

をまた、response.result.valueが最も可能性が高いUIImageではありませんが、それはデータのいくつかのフォームです。あなたのレスポンスの中に何が入っているのか分かりません.result.valueデータinitを使ってUIImageを初期化する必要があります。

if let image = UIImage(data: response.result.value) {   
} 
関連する問題