2016-08-02 54 views
1

我有一個從框架多次調用的委託方法,我需要它等待在它再次運行之前顯示所有字母。我嘗試過dispatch_async(dispatch_get_main_queue(),但再次調用該方法的另一個實例時會運行。方法不等待,直到再次運行

var myInt = 1 

      for letter in message.characters { 

       let delay = 0.1 * Double(NSEC_PER_SEC) * Double(myInt) 
       let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 

       dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
        self.textView.text = self.textView.text + String(letter) 
       }) 

       myInt = myInt + 1 
      } 
      self.textView.text = self.textView.text + "\n" 
+1

使用標誌,不,直到所有的字母都不會顯示 –

+0

當您使用dispatch_after 未擋住,你可能認爲主隊列運行方法。 –

回答

0

在delega創建serial隊列

let delegateQueue = dispatch_queue_create("com.domain.delegateQueue", DISPATCH_QUEUE_SERIAL) 

TE法

dispatch_async(delegateQueue, ^{ 
    //all the things done in delegate method 
}) 
+0

這就是我所需要的。謝謝。 – user1079052

0

你必須讓兩個線程像下面,然後運行代碼..你想要做的第一任務,你需要等待的任務可以像下面進行管理:還是任何

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 
      // waiting task 

dispatch_async(dispatch_get_main_queue(), {() -> Void in 

     // task you have to do first 
    }) 
     }) 

查詢你可以問我..

+0

我在這裏添加了我的代碼,我仍然遇到同樣的問題: – user1079052

+0

我把我的代碼放在dispatch_async(dispatch_get_main_queue部分 – user1079052

+0

如果它沒有解決,那麼你必須使用dispatch_after函數.. – JAck

相關問題