这个问题让我发疯了......
我有这个字符串url
:
"的 verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg "
我必须在imageView
。
这是我的代码:
do {
let url = URL(fileURLWithPath: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg")
let data = try Data(contentsOf: url)
self.imageView.image = UIImage(data: data)
}
catch{
print(error)
}
抛出异常:
没有这样的文件或目录。
但如果我使用浏览器搜索此url
,我可以正确看到图像!
答案 0 :(得分:9)
您使用错误的方法来创建网址。请尝试URLWithString
而不是fileURLWithPath
。 fileURLWithPath
用于从本地文件路径获取图像,而不是从互联网网址获取图像。
或
do {
let url = URL(string: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg")
let data = try Data(contentsOf: url)
self.imageView.image = UIImage(data: data)
}
catch{
print(error)
}
答案 1 :(得分:4)
方法fileURLWithPath
从文件系统打开文件。文件地址前缀为file://
。您可以打印网址字符串。
关于+ (NSURL *)fileURLWithPath:(NSString *)path;
NSURL对象将表示的路径。路径应该是有效的 系统路径,不能是空路径。如果路径以a开头 tilde,首先必须使用stringByExpandingTildeInPath进行扩展。如果 path是一个相对路径,它被视为相对于 当前的工作目录。
以下是一些可能的解决方案之一:
let imageName = "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg"
func loadImage(with address: String) {
// Perform on background thread
DispatchQueue.global().async {
// Create url from string address
guard let url = URL(string: address) else {
return
}
// Create data from url (You can handle exeption with try-catch)
guard let data = try? Data(contentsOf: url) else {
return
}
// Create image from data
guard let image = UIImage(data: data) else {
return
}
// Perform on UI thread
DispatchQueue.main.async {
let imageView = UIImageView(image: image)
/* Do some stuff with your imageView */
}
}
}
loadImage(with: imageName)
如果您只是发送一个完成处理程序以在主线程上执行loadImage(with:)
,那么这是最佳做法。
答案 2 :(得分:0)
这里的网址不是本地系统,而是服务器。
let url = URL(fileURLWithPath: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg")
此处创建的网址是设备本地的文件。 像这样创建网址: -
url = URL(string: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg")
答案 3 :(得分:0)
使用下面的代码片段将图像加载到imageview中
func imageDownloading() {
DispatchQueue.global().async {
let url = URL(string: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg")!
do {
let data = try Data(contentsOf: url)
DispatchQueue.main.async {
self.imageView.image = UIImage(data: data)
}
} catch {
print(error.localizedDescription)
}
}
}