【问题标题】:How to fetch an image from server URL data to UIBarButton?如何从服务器 URL 数据中获取图像到 UIBarButton?
【发布时间】:2019-11-22 16:29:35
【问题描述】:

我想从服务器 URL 获取图像到我的栏按钮项。我正在使用如下代码,但它给出了一个错误:线程 1:致命错误:在隐式展开可选值时意外发现 nil。我怎么解决这个问题 ?注意:loadImg 函数是一个扩展,它在另一个控制器中工作。 serverURL 是我的个人资料数据类。

let imageView = UIImageView()
imageView.loadImg(url: URL(string: self.serverURL.ppUrl!)!) // this line give error
let customView = UIButton(type: .system)
customView.setImage(imageView.image, for: .normal)
customView.backgroundColor = .white

let barButtonItem = UIBarButtonItem(customView: customView)
navigationItem.leftBarButtonItem = barButtonItem

extension UIImageView {
    public func loadImg(url: URL) {
        DispatchQueue.global().async { [weak self] in
            if let data = try? Data(contentsOf: url) {
                if let image = UIImage(data: data) {

                    DispatchQueue.main.async {
                        self?.image = image
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: swift uiimageview uibarbuttonitem


    【解决方案1】:

    您正在强制解开两个可选项(标有!)。如果其中一个或两个都为 nil,您将遇到崩溃。所以你需要先检查它们是否存在,否则就保释。

    类似这样的:

    let imageView = UIImageView()
    if let urlString = self.serverURL.ppUrl as? String, let url = URL(string: urlString) as? URL {
    
        imageView.loadImg(url: url)
        ...
    }
    

    【讨论】:

    • 谢谢,我试过了,但还是一样的错误。我会检查我的数据
    • 您可以在此处找到有关此错误的更多信息:stackoverflow.com/questions/32170456/…
    • loadImg 是什么?
    • loadImg 是一个扩展,用于从服务器数据中获取 url 字符串等图像。它在其他控制器中工作。在这个控制器中,我使用了两个选项(标有!),但它正在工作。
    • 和“如果让”模式,比我的“解开两个选项”安全吗?我是快速编程的新手
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 2019-07-21
    • 2016-06-05
    • 2011-10-27
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多