Lu *_*eng 6 nsurl nsdata swift ios8
我试图从我的应用程序下载图片
请求失败,错误为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!);
})
Run Code Online (Sandbox Code Playgroud)
Ree*_*edy 21
你遇到这个问题的原因是你曾经使用过
let url = NSURL(fileURLWithPath: userImageURL);
Run Code Online (Sandbox Code Playgroud)
相反,你应该使用:
let url = NSURL(string: userImageUrl)
Run Code Online (Sandbox Code Playgroud)
Lar*_*rme 11
我在Objective-C中编码,应该很容易在Swift中进行转换(实际上是小修改,但解释与代码没有多大关系).如果您检查错误完成消息,您将获得:
错误域= NSURLErrorDomain代码= -1100"在此服务器上找不到请求的URL." UserInfo = 0x7997b7e0 {NSErrorFailingURLStringKey = file:/// http:/i.imgur.com/QhCzQoR.jpg,NSErrorFailingURLKey = file:/// http:/i.imgur.com/QhCzQoR.jpg,NSLocalizedDescription =请求的URL是在此服务器上找不到.,NSUnderlyingError = 0x799f3080"在此服务器上找不到请求的URL."}
显然,如果你仔细查看URL,那么就file:///http:/i.imgur.com/QhCzQoR.jpg不是想要的URL了.如果你记录url.absoluteString,你会看到你的URL,就是你这样设置它.
为什么?因为你用fileURLWithPath:而不是URLWithString:.所以改变你的行:
let url = NSURL(URLWithString: userImageURL);
Run Code Online (Sandbox Code Playgroud)
关于这两者之间差异的一些讨论: NSURL的URLWithString和fileURLWithPath之间有什么区别? 或者文件.
更新:在Swift 4中:
let url = URL(string: userImageURL)
Run Code Online (Sandbox Code Playgroud)
我们还建议从Swift3 +中避免使用Swift等效时的NSStuff:NSURL=> URL.
| 归档时间: |
|
| 查看次数: |
10333 次 |
| 最近记录: |