1

Я пытаюсь получить ленивую загрузку изображений с URL-адреса и обновлять пользовательский интерфейс после получения изображения только в основной очереди, пользовательский интерфейс обновляется, но просмотр становится неактуальным, я использую GCD для создания нового потока для получения данных из URL-адресаUI перестает отвечать на запросы после входа в основную очередь

let imageUrl: NSURL = NSURL (строка: SiteAPIURL + (DEFAULTS.valueForKey (kInviterImageUrl) as! String))!

let request: NSURLRequest = NSURLRequest(URL: imageUrl) 
    SwiftLoader.show(title: "Loading", animated: true) 


    let queue : dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 

    dispatch_async(queue) {() -> Void in 
    let data : NSData = NSData(contentsOfURL: imageUrl)! 
    let image = UIImage(data: data)! 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.userImage.image = image 
     self.userImageWide.image = image 

    }) 



    } 

}

ответ

0

«DISPATCH_QUEUE_PRIORITY_HIGH: Детали посланы в пробег очереди с высоким приоритетом; очереди запланирована на выполнение перед приоритетом любого по умолчанию или низкий приоритет очереди.» из документации, поэтому используйте что-то еще с меньшим приоритетом, так как это может блокировать очередь по умолчанию, например QOS_CLASS_USER_INITIATED. Сделай то, что хочешь

if let url = imageUrl{ 
     let qos = Int(QOS_CLASS_USER_INITIATED.rawValue) 
     dispatch_async(dispatch_get_global_queue(qos, 0), { 
      let data = NSData(contentsOfURL: imageUrl) 
      dispatch_async(dispatch_get_main_queue(), { 
       if data != nil { 
        if let image = UIImage(data: data){ 
         self.userImage.image = image 
         self.image = UIImage(data: imageData!) 
         self.userImageWide.image = image 
        } 
       } 
      }) 
     }) 
    } 
+0

он работал абсолютно нормально thnx –