我正在尝试将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语法吗? 谢谢!
答案 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()
}