2015-02-05 5 views
0

이 문제의 원인을 이해하는 데 3 일을 소비했습니다.Swift - 데이터를 가져온 후 dataTaskWithURL이 자동으로 종료되지 않습니다.

서버에서 데이터를 가져 오는 데 아래 코드를 사용하고 있습니다. 그러나 완료 핸들러의 데이터를 println() 할 수 있지만 println 이후 activity indicator 인 stopAnimating() 또는 label.text 할당은 약 20 초 후에 발생합니다.

데이터가 도착한 후에도 세션이 계속 살아 있다고 생각합니다. 그렇다면 어떻게 취소합니까? 그렇지 않다면 나는 무엇을 놓치고 있는가 ???

let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(url)) { data, response, error in 

      if(error == nil){ 

       //This works in 1second 
       println("string coming from data") 

       //these happen around 20 mins after the above 
       self.loading.stopAnimating() 
       self.label.text = "string coming from data" 
      } 

    } 
    task.resume() 

답변

0

NSURLSession.sharedSession().dataTaskWithURL은 백그라운드 스레드에서 수행됩니다. 메인 스레드의 UI를 항상 다음과 같이 업데이트하십시오.

dispatch_async(dispatch_get_main_queue()) { 
    self.loading.stopAnimating() 
    self.label.text = "string coming from data" 
}