NSURLErrorDomain,代码= -1100

时间:2015-02-01 20:14:26

标签: swift ios8 nsdata nsurl

我试图从

下载图片到我的应用程序

enter image description here 请求失败,错误为NSURLErrorDomain,代码实际为-1100。网址应该是正确的,因为我在浏览器中检查了它。谁知道为什么?

let userImageURL: String! = "http://i.imgur.com/QhCzQoR.jpg";
let url = NSURL(fileURLWithPath: userImageURL);
let request:NSURLRequest = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: { (response:NSURLResponse!, imageData:NSData!, error:NSError!) -> Void in
                let image = UIImage(data: imageData!);
 })

2 个答案:

答案 0 :(得分:19)

您遇到此问题的原因是您已使用

let url = NSURL(fileURLWithPath: userImageURL);

相反,你应该使用:

let url = NSURL(string: userImageUrl)

答案 1 :(得分:11)

我在Objective-C中编码,应该很容易在Swift中进行转换(实际上是小修改,但解释与代码没有多大关系)。 如果您检查错误完成消息,您将获得:

  

错误域= NSURLErrorDomain代码= -1100"请求的URL不是   在这台服务器上找到。"的UserInfo = 0x7997b7e0   {NSErrorFailingURLStringKey =文件:/// HTTP:/i.imgur.com/QhCzQoR.jpg,   NSErrorFailingURLKey =文件:/// HTTP:/i.imgur.com/QhCzQoR.jpg,   NSLocalizedDescription =未找到请求的URL   server。,NSUnderlyingError = 0x799f3080"找不到请求的URL   在这台服务器上。"}

显然,如果仔细查看网址,则会显示file:///http:/i.imgur.com/QhCzQoR.jpg,而不是所需的网址。如果您记录url.absoluteString,则会在您的网址上看到它,您就是这样设置的。

为什么呢?因为您使用了fileURLWithPath:而不是URLWithString:。 所以改变你的行:

let url = NSURL(URLWithString: userImageURL);

关于这两者之间差异的一些讨论: What is difference between URLWithString and fileURLWithPath of NSURL?doc

更新:在Swift 4中:

let url = URL(string: userImageURL)

我们还建议Swift3 +在存在Swift等效时避免NSStuff:NSURL => URL