2016-04-03 4 views
0

私は画面上の画像のグループを通過しようとしていますが、それぞれの間に遅延があります。iOS:テーブルビュー内のメソッドとデータがあまりにも早く呼び出されています

私のテーブルビューで
func showImageAtIndex(index: Int) { 

    // all UI updates happen on the main queue 
    dispatch_async(dispatch_get_main_queue()) { 
     if (index) > self.images.count-1 { self.otherView.removeFromSuperview() 
      self.imageView?.removeFromSuperview() 
      return 
     } 


     self.imageView?.image = self.images[index] 


     let delayTime = 0.13 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delayTime * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {() -> Void in 

      self.showImageAtIndex(index + 1) 
     } 
    } 

、ボタンがクリックされたときに、テーブル内のデータが最初にリロードされる理由は、showImageAtIndexは、私が知りたいのは何

func onAdd(sender: AnyObject) { 
self.temp=self.lotteryMachine.setPossibleCombinations(currentStandings) 
    //i took out the image view stuff bc its not necessary 
    self.navigationItem.rightBarButtonItem!.enabled = false 
    self.navigationItem.leftBarButtonItem!.enabled = false 
    self.showImageAtIndex(0) 
    tableView.reloadData() 
    self.navigationItem.rightBarButtonItem!.enabled = true 
    self.navigationItem.leftBarButtonItem!.enabled = true 
} 

と呼ばれる方法があり、その後、画像他の方法ではなく読み込まれます。私は何をしたいのですが、画像が読み込まれ、その遅延の後にデータが更新されます。

答えて

1

showImageAtIndex関数はdispatch_asyncを使用します。つまり、クロージャ内のすべてが非同期で行われます。

showImageAtIndex(0)の呼び出しはすぐに戻り、dispatch_afterクロージャ内の遅延コードが実行される前にtableView.reloadData()の呼び出しが発生します。

dispatch_afterクロージャ内でshowImageAtIndex(index + 1)にコールした後にtableView.reloadData()を移動してみてください。

+0

データを早期にリロードする理由がわかりましたが、dispatch_afterセグメント内で移動すると、リロードが早すぎます。再帰関数なので、最初の呼び出し(最初の画像が表示された)の後にデータが読み込まれますが、画像の配列がすべて表示された後に読み込みたいと思っています。私は配列の長さを知っているので、ちょうどカウントを設定して毎回インクリメントする必要があり、それが長さ-1と等しいならば、データをリロードするだけですか? –

+0

チェックを行い、dispatch_after内のデータをリロードしている場合は、正常に動作するはずです。 –

+0

私はそれをdispatch asyncの最初のif文の中に入れてしまい、正常に動作します –

関連する問題