2017-03-29 21 views
0

現在、JSONデータを収集してデータオブジェクトに割り当てた後、関数の一部を使用します。その後、データオブジェクトのイメージデータ値をループしてイメージビューを更新します。ループが終了したら、テーブルビューをリロードします。発生している問題は、すべての単一のオブジェクトが更新された後に、テーブルビューが再読み込みされ、点滅およびその他の視覚的ミスを作成することです。すべての画像データが更新された後でテーブルビューを読み込むことができれば、それは良いでしょう。ここでは、コードのその部分は次のとおりです。ループが終了した後に関数を呼び出す方法は?

if let extraImages = self.profileData?.images{ 

    let extraMovieImages = extraImages.images 
    for image in extraMovieImages { 
     self.updateImage(ImageType: DownloadPic.personal, ImageString: image.filePath, completion: {_ in 

     DispatchQueue.main.async { 
      self.TableView.reloadData() 
     } 
     }) 
    } 
    } 
+1

[あなたの前の質問](http://stackoverflow.com/questions/43084587/better-way-to-reload-a-tableviewの再投稿このされていないことを使用する必要があります-after-iterating-over-an-image-array)? – rmaddy

+0

私は答えがどれも似ていないので、私は質問を簡略化しました – SwiftyJD

+1

私はあなたの前の質問を複写として閉じました。複製は、あなたが何をする必要があるかを示しました。そしてそれはJuicyFruitによって下で提供されている答えです。 – rmaddy

答えて

3

あなたはDispatchGroup

let group = DispatchGroup() 
for image in extraMovieImages { 
    group.enter() 
    self.updateImage(ImageType: DownloadPic.personal, ImageString: image.filePath, completion: {_ in 
     group.leave() 
    }) 
} 
group.notify(queue: DispatchQueue.main) { 
    self.TableView.reloadData() 
} 
+0

これは働いた、ありがとう! – SwiftyJD

3

ループの前に変数を作成します。

let expectedCount = extraMovieImages.count 

を次に完了ブロックでそれをカウントダウンし、それが0になったとき、リロード。

もう1つの考え方は、各イメージがどの行に表示されているかわかっている場合は、テーブル全体ではなくその行をリロードすることです。

+0

これも良いですが、カウントは各オブジェクトで同じではありません – SwiftyJD

関連する問題