2014-10-31 1 views
0

В этом коде я получаю строку с веб-сайта и показываю ее на ярлыке. Показать строку на этикетке очень медленно! около 10 секунд. Но при печати строки на консоли println (date) является немедленной. Как я могу это исправить?HTTPsendRequest очень медленный

func HTTPsendRequest(request: NSMutableURLRequest, 
    callback: (String, String?) -> Void) { 
     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
      (data, response, error) -> Void in 
      if (error != nil) { 
       callback("", error.localizedDescription) 
      } else { 
       callback(NSString(data: data,encoding: NSUTF8StringEncoding)!, nil) 
      } 
     } 

     task.resume() 
} 

func HTTPGet(url: String, callback: (String, String?) -> Void) { 
    var request = NSMutableURLRequest(URL: NSURL(string: url)!) 
    HTTPsendRequest(request, callback) } 


@IBAction func myButton(sender: AnyObject) { 

    HTTPGet("http://www.mywebsite.com/test.txt") { (data: String, error: String?) -> Void in 
     if (error != nil) { 
      self.myLabel.text=error 
      println(error) 
     } else { 
      self.myLabel.text=data 
      println(data) 
     } 
    } 
} 

ответ

2

Блоки завершения NSURLSession не запускаются в основной очереди. Но вы должны запускать обновления пользовательского интерфейса в основном потоке, поэтому вы должны отправить туда callback, например:

func HTTPsendRequest(request: NSMutableURLRequest, callback: (String, String?) -> Void) { 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     (data, response, error) -> Void in 

     dispatch_async(dispatch_get_main_queue()) { 
      if (error != nil) { 
       callback("", error.localizedDescription) 
      } else { 
       callback(NSString(data: data,encoding: NSUTF8StringEncoding)!, nil) 
      } 
     } 
    } 

    task.resume() 
}