对象加载UIImage使用swift崩溃程序执行

时间:2017-08-21 12:47:50

标签: ios swift uiimageview xcode9-beta

程序有Simpson课程:

import Foundation
import UIKit

class Simpson
{
    var name=""
    var occupation=""
    var image = UIImage()
}

使用这个类我声明了一个数组:

import UIKit

class tableVC: UIViewController ,UITableViewDelegate,UITableViewDataSource{

    @IBOutlet weak var tableView: UITableView!
 var mySimpsons=[Simpson]()
    override func viewDidLoad() {
        super.viewDidLoad()
        //tableview setup
        tableView.delegate=self
        tableView.dataSource=self

        //create our Character
        let homer=Simpson()
        homer.name="Homer Simpson"
        homer.occupation="safty inseptor"
        homer.image=UIImage(named: "Homer.png")!

        let bart=Simpson()
        bart.name="Bart Simpson"
        bart.occupation="Student"
        bart.image=UIImage(named: "Bart.png")!

        let marge=Simpson()
        marge.name="Marge Simpson"
        marge.occupation="HomerMaker"
        marge.image=UIImage(named: "Marge.png")!

        let Ned=Simpson()
        Ned.name="Ned Simpson"
        Ned.occupation="Phamacist"
        Ned.image=UIImage(named: "Ned.png")!

         mySimpsons.append(homer)
         mySimpsons.append(bart)
         mySimpsons.append(marge)
         mySimpsons.append(Ned)
}

UITableView委托的职能是:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return mySimpsons.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell=UITableViewCell()
    cell.textLabel?.text=mySimpsons[indexPath.row].name
    return cell
}

这个程序成功执行但是当Simpsons对象被赋予图像链接时它无法启动并且程序崩溃。 即

homer.image=UIImage(named: "Homer.png")!

我如何摆脱这个错误?您可以从此链接下载示例项目表格更正link

1 个答案:

答案 0 :(得分:2)

发生崩溃是因为您强制解包UIImage实例。首先,检查是否将这些图像添加到项目中。然后检查图像是否通过以下方式正确实例化:

if let image = UIImage(named: "Homer") {
   homer.image = image
}

根据UIImage.init(named:) documentation

  

对于PNG图像,您可以省略文件扩展名。对于所有其他文件格式,请始终包含文件扩展名。