Swift UIImage Named is nil inside UITableViewController



我正在尝试将其他图像添加到我的UITATION VIEWCONTROLLER中,并且创建了一个函数,该函数从捆绑包中读取,其中包含呈现所需的所有图像。问题在于,某些图像在创建UIImage对象时返回无零,而另一些图像则可以用作UIIMAGE。我不确定导致此问题的原因是什么,因为图像位于捆绑包内并预览它的工作。谢谢!

 //Retrieve Icons
 //Read from file path and append it to an array.

 //Retrieve Icons
    //Read from file path and append it to an array.
    private func loadIcons() {
        let fileManager = FileManager.default
        let bundleURL = Bundle.main.bundleURL
        let assetURL = bundleURL.appendingPathComponent("UIAssets.bundle")
        let contents = try! fileManager.contentsOfDirectory(at: assetURL, includingPropertiesForKeys: [URLResourceKey.nameKey, URLResourceKey.isDirectoryKey], options: .skipsHiddenFiles)
        //BUG: doesnt work with some png/jpg image is returning nil
        for item in contents {
            let itemStr = item.absoluteString
            if itemStr.contains("png") || itemStr.contains("jpg"){
                let imageName = (itemStr as NSString).lastPathComponent
                print(imageName)
                let image = UIImage(named: imageName)
                self.models[imageName] = image
            }
        }
    }

我很惊讶它适用于任何图像,因为 UIImage(named:)不适合您主束子目录内的图像。它只查看主捆绑包的最高级别。

但是,解决方案很简单:不要使用UIImage(named:)。也不要使用路径名。绝对没有必要。您手中有解决方案:contentsOfDirectory(at:)返回一个URL数组,因此,当您说for item in contents时,每个item is 是您的图像之一的URL。因此,您可以直接加载item。调用Data(contentsOf:item)获取文件数据,然后使用UIImage(data:)将其转换为图像。

相关内容

  • 没有找到相关文章