无法加载HTTP网址图片

时间:2015-08-20 20:01:43

标签: ios swift watchkit watch-os-2

我正在尝试将watchOS 1应用转换为watchOS 2。 但是当我尝试使用以下代码从URL加载图像时发现错误:

let url:NSURL = NSURL(string: "http://www.xxxxxxxx.com/xxx/xyz.jpg")!
let data:NSData = try! NSData(contentsOfURL:url, options:[])
imageone.setImage(UIImage(data: data))

错误是:

  

错误Domain = NSCocoaErrorDomain Code = 256“无法打开文件”xyz.jpg“。”的UserInfo = {NSURL = http://www.xxxxxxxx.com/xxx/xyz.jpg}

我在网上看到这是因为新的Application Transport Security协议。 我也读了

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

在Watchkit扩展的info.plist中,但出现相同的错误。 如果我在HTTPS域中使用图像,也是一样的。

  

注意:在模拟器上它完美运行!

我正在使用XCode 7 beta 5。

有谁知道如何解决这个问题?

  

UPDATE   环顾网络,我发现可能使用NSURLSession我会解决问题,但我没有发现任何有用的东西。   有人可以帮助我将我的代码转换为NSURLSession语法吗?   谢谢!

2 个答案:

答案 0 :(得分:1)

这是在Objective-C中使用NSSession实现此目的的简单方法。在Swift

中翻译它应该不难
NSString *dataUrl = @"http://www.xxxxxxxx.com/xxx/xyz.jpg";
NSURL *url = [NSURL URLWithString:dataUrl];

NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession]
dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
UIImage *downloadedImage = [UIImage initWithData:data];
    // Do what you like with your image
}];

[downloadTask resume];

答案 1 :(得分:-1)

我解决了创建函数的问题:

func imageRequest(urlweb:NSURL) {

    let requestURL: NSURL = urlweb
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in

        if error == nil {

            NSLog("Success!")
            self.imagename?.setImage(UIImage(data:data!))

        } else {

            NSLog("Fail")

        }

    }

    task.resume()

}