【问题标题】:Unable to load HTTP URL Image无法加载 HTTP URL 图像
【发布时间】:2015-08-20 20:01:42
【问题描述】:

我正在尝试将 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))

错误是:

Error Domain=NSCocoaErrorDomain Code=256 "无法打开文件“xyz.jpg”。"用户信息={NSURL=http://www.xxxxxxxx.com/xxx/xyz.jpg}

我在互联网上读到这是因为新的应用程序传输安全协议。 我也读了放

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

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

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

我正在使用 XCode 7 beta 5。

有人知道怎么解决吗?

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

【问题讨论】:

  • 你确定图片存在吗?我觉得这是 URL 的问题……
  • @Idris 是的,我尝试在 HTTP 或 HTTPS 上使用不同的图像,在 Mac 浏览器上工作,也在我在模拟器中执行的项目上工作
  • 我刚刚遇到这个问题,请确保在 info.plist(应用程序和 Watchki 扩展...)中都使用 NSAllowsArbitraryLoads 并清理项目
  • @Jeremy Luisetti 我刚试过但没用。人们说它只需要在扩展上添加。在模拟器中完美运行
  • 还有其他人知道如何解决这个问题吗?或者它可能是一个已知的错误?

标签: ios swift watchkit watchos-2


【解决方案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];

【讨论】:

    【解决方案2】:

    我解决了创建函数:

    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()
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 2012-06-30
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2016-12-15
      • 2018-08-20
      • 1970-01-01
      相关资源
      最近更新 更多