我有一个png图像数组。
iconeImage = [UIImage(named:"ion-home")!,UIImage(named:"ms-medkit")!,UIImage(named:"ion-edit")!,UIImage(named:"ion-clipboard")!,UIImage(named:"ion-clipboard")!,UIImage(named:"ion-waterdrop")!,UIImage(named:"ion-calendar")!]
我有一个用于table-view的函数,它使用这个数组元素设置图像
这是代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuTableViewCell") as! MenuTableViewCell
cell.imgIcon.image = iconeImage[indexPath.row]
return cell
}
但是它给我一个iconeImage有零值的错误。所以你能给我建议解决方案吗?我是swift 3的初学者
这是截图 ![两个muppets] [1]
答案 0 :(得分:4)
不是将所有图像保存在内存中,而是建议您存储图像名称:
let iconImages = ["ion-home", "ms-medkit", "ion-edit", "ion-clipboard", "ion-waterdrop", "ion-calendar"]
并在需要时直接预加载每个图像。它不会影响性能,因为它是小图标。代码看起来也更清晰。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuTableViewCell") as! MenuTableViewCell
cell.imgIcon.image = UIImage(named: iconImages[indexPath.row])
return cell
}
仔细检查是否所有资产都已添加到您的项目中。如果他们在那里,应该显示图像。
尽量避免在代码中使用隐式解包的可选(!)。零值将使应用程序崩溃。在您的示例中,imageView.image是可选的,因此您可以将UIImage(名为:" imageName")设置为它。
此外,您可以尝试清理构建文件夹,清理项目并重新安装该应用程序。有时在Xcode中复制资源失败。
答案 1 :(得分:2)
请尝试以下格式
let img = iconeImage[indexPath.row]
if let imgData = img {
cell.imgView.image = UIImage(data:imgData)
}
答案 2 :(得分:2)
您可以改为存储图像名称:
let iconImageNames = ["ion-home","ms-medkit", ... , "ion-calendar")]
稍后在您的方法中访问它们:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuTableViewCell") as! MenuTableViewCell
let name = iconeImage[indexPath.row] ?? yourDefaultImageName
cell.imgIcon.image = UIImage(named: name)
return cell
}
作为一个例子
答案 3 :(得分:1)
我不知道究竟是什么问题。
但是当我搜索stackoverflow时。某处我读过Assets.xcassets的问题
然后我得到了this
的错误然后在答案的帮助下解决错误。
希望我解决了这个错误。
同时问题在于资产文件夹。