【问题标题】:NSURLErrorDomain with code=-1100NSURLErrorDomain 代码=-1100
【发布时间】:2015-03-31 18:51:43
【问题描述】:

我试图从

下载图片到我的应用

请求失败并出现错误 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!);
 })

【问题讨论】:

    标签: swift ios8 nsdata nsurl


    【解决方案1】:

    我用Objective-C编码,用Swift转换应该很容易(其实是小修改,但解释与代码无关)。 如果您检查错误完成消息,您将获得:

    Error Domain=NSURLErrorDomain Code=-1100 "请求的 URL 不是 在此服务器上找到。” UserInfo=0x7997b7e0 {NSErrorFailingURLStringKey=file:///http:/i.imgur.com/QhCzQoR.jpg, NSErrorFailingURLKey=file:///http:/i.imgur.com/QhCzQoR.jpg, NSLocalizedDescription=在此未找到请求的 URL server., NSUnderlyingError=0x799f3080 "未找到请求的 URL 在这台服务器上。"}

    很明显,如果您仔细查看 URL,您会看到 file:///http:/i.imgur.com/QhCzQoR.jpg,这不是您想要的 URL。如果您登录url.absoluteString,您会在您的 URL 中看到它,是您将其设置为这样。

    为什么?因为您使用了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 Equivalent 时避免使用 NSStuff:NSURL => URL

    【讨论】:

    • 我觉得这个方法在Swift2中已经改成NSURL(string:String?)了。请注意,当您使用此 URL 创建请求时,您必须在 url 变量之后添加 !,因为 string 在此方法中是可选的。
    【解决方案2】:

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

    let url = NSURL(fileURLWithPath: userImageURL);
    

    你应该使用:

    let url = NSURL(string: userImageUrl)
    

    【讨论】:

    • 这与去年的上一个投票结果相同。
    • 有很多内容要经过,这要清楚得多。
    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2017-05-04
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多