将图像从assets.xcassets加载到imageArray中,并将其动态加载到UIImageView中,UIIma



我正在尝试将一组图像从资产加载到 UICollectionview 中存在的图像视图中,但每当我运行应用程序时它都会显示错误。也没有显示图像。

我在ViewDidLoad中使用的代码是,

var logoImage: [UIImage] = [
    UIImage(named: "bakery")!,
    UIImage(named: "baby")!,
    UIImage(named: "frozen")!,
    UIImage(named: "beauty")!,
    UIImage(named: "cereal")!,
    UIImage(named: "dairy")!,
    UIImage(named: "drinks")!,
    UIImage(named: "fruitsAndVeg")!,
]

cellForItemAtIndexPath中的代码是,

cell.descImage.image = self.logoImage[indexPath.item]

当我运行该应用程序时,出现错误:

致命错误:解开可选值时意外发现 nil

var logoImage: [UIImage] = [
    UIImage(named: "bakery")!,

P.S.I将图像从另一个项目导入xcasset,现在这可能是一个问题吗?

代码在上面的行上分解。任何帮助将不胜感激!

使用 ! 时,您解开一个可选值,这意味着您告诉编译器:我知道图片不nil。因此,如果您对编译器撒谎,则会收到以下错误:

致命错误:解开可选值时意外发现 nil

如果该行:

var logoImage: [UIImage] = [
    UIImage(named: "bakery")!,

可能是数组中的任何图片都丢失了,但它会破坏您的程序。

您可以尝试使用条件语句加载单个图像以定位您的问题,并更好地设计您的代码:

  1. 创建空UIImage数组
  2. 使用映像名称创建Strings数组
  3. Strings数组上循环使用解包图像

    var logoImage = [UIImage]() //1 
    var names: [String] = ["bakery",...] //2
    //3
    for imageName in names{ 
      if let image = UIImage(named: imageName) {
        logoImage.append(image)
      }
      else {
        print("image named: (imageName) is missing")
      }
    }
    

最新更新