2016-02-17 6 views
1

Я играю на игровой площадке, пытаясь лучше понять загрузку и настройку асинхронного изображения.Как обновить UIImageView после загрузки изображения на игровой площадке

Я использую NSURLSession DataTask, и у меня есть данные изображения, которые идут великолепно - я могу подтвердить это, используя Quick Look.

Я также использую инфраструктуру XCPlayground, чтобы установить страницу так, как она нуждается в неограниченном исполнении, а liveView currentPage является целевым imageView.

Тем не менее, что-то по-прежнему отсутствует, и просмотр в реальном времени не обновляется должным образом. Есть идеи? То, что я хочу сделать, сводится к следующему коду. Вы можете увидеть состояние детской площадки в скриншоте:

import UIKit 
import XCPlayground 

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

let someImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 256, height: 256)) 

let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
session.dataTaskWithRequest(NSURLRequest(URL: NSURL(string: "http://www.stridesapp.com/strides-icon.png")!)) 
    { 
     data, response, error in 
     if let data = data 
     { 
      print(data) 
      someImageView.image = UIImage(data: data) 
     } 
    }.resume() 

XCPlaygroundPage.currentPage.liveView = someImageView 

The state of the Playground

ответ

1

Учитывая, что NSURLSession не будет работать его обработчик завершения на главную очереди, вы должны направить на обновление представления в основную очередь самого :

import UIKit 
import XCPlayground 

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

let someImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 256, height: 256)) 

let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
session.dataTaskWithRequest(NSURLRequest(URL: NSURL(string: "http://www.stridesapp.com/strides-icon.png")!)) { data, response, error in 
     if let data = data { 
      print(data) 
      dispatch_async(dispatch_get_main_queue()) { 
       someImageView.image = UIImage(data: data) 
      } 
     } 
    }.resume() 

XCPlaygroundPage.currentPage.liveView = someImageView 

Таким образом:

live view

+0

Это сделало! Ошибка новичков. Спасибо, @Rob. – tracicot

Смежные вопросы