1

非同期イメージのダウンロードと設定をよりよく理解しようとして、プレイグラウンドで遊んでいます。

私は NSURLSession DataTask を使用しており、画像データがうまく入っています。これは Playground の Quick Look を使用して確認できます。

また、XCPlayground フレームワークを使用して、無期限の実行が必要なページを設定しています。currentPage の liveView はターゲットの 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

遊び場の様子

4

1 に答える 1

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

したがって:

ライブビュー

于 2016-02-17T05:33:59.727 に答える