UIImageView,从远程URL加载UIImage

问题描述 投票:1回答:3

这个问题让我发疯了...我有这个字符串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,我可以正确地看到图像!

ios swift url uiimageview uiimage
3个回答
9
投票

您使用错误的方法来创建URL。试试URLWithString而不是fileURLWithPathfileURLWithPath用于从本地文件路径获取图像而不是从Internet URL获取图像。

要么

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

4
投票

方法fileURLWithPath从文件系统打开文件。文件地址前面加上file://。您可以打印网址字符串。

来自Apple有关+ (NSURL *)fileURLWithPath:(NSString *)path;的文档

NSURL对象将表示的路径。 path应该是有效的系统路径,并且不能是空路径。如果path以波浪号开头,则必须首先使用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:),这是最好的做法。


0
投票

这里的url不是本地系统,而是服务器。

  let url = URL(fileURLWithPath: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg")

这里创建的url是文件,它位于设备本地。像这样创建网址: -

  url = URL(string: "http://verona-api.municipiumstaging.it/system/images/image/image/22/app_1920_1280_4.jpg") 
© www.soinside.com 2019 - 2024. All rights reserved.