从代码添加UIImage时崩溃

时间:2015-05-20 12:40:04

标签: ios swift uiimage

我是一个Swift初学者,我正在编写一个可以显示一系列内容的应用。当您点击其中一个时,您将获得有关它和照片的详细信息。但是,我遇到了一个问题 - 我有代码来显示图像,但是当我点击模拟器时它会崩溃。

应用崩溃时位于xcode底部的文字:

  

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

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var detail = segue.destinationViewController as! detailSkinsViewController
    detail.skinNameLabel = self.skin
    if (self.skin == "AK47 | Wasteland Rebel") {
        detail.skinImg.image = UIImage(named: "s495fn")
    }
}

谢谢!

3 个答案:

答案 0 :(得分:3)

您应该查看崩溃堆栈以查看实际行。有几个地方你可能遇到麻烦:

var detail = segue.destinationViewController as! detailSkinsViewController

如果destinationViewController不属于detailSkinsViewController类,则会请求崩溃。 (Swift类应该始终以大写字母开头。这也应该是let,而不是var。你永远不会修改它。)在这里使用if-let会更安全。

    detail.skinImg.image = UIImage(named: "s495fn")

目前还不清楚这些是什么,但是如果skinImgUIImageView!,那么如果尚未加载目标NIB(可能),则会发生崩溃。出于这个原因,您通常不应该进入其他对象IBOutlets。 (对于IBOutlets,这也是使用?而不是!的一个很好的理由。这将导致“没有任何反应”,而不是崩溃。)

您应该在视图控制器本身上创建UIImage?属性,而不是弄乱其他视图控制器出口。在didSet中,如果视图已加载(UIImageView),请更新isViewLoaded。在viewDidLoad期间,使用该属性初始化UIImageView。通过这种方式,您可以为其他人设置一个明确的API来设置不公开内部子视图的图像(这是实现细节)。

举个例子:

class ViewController: UIViewController {
    @IBOutlet private var imageView: UIImageView?
    var image: UIImage? {
        didSet(newImage) {
            self.imageView?.image = newImage
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.imageView?.image = self.image
    }
}

答案 1 :(得分:0)

当尝试解包一个根本没有值的可选变量的值时,通常会出现此错误。 首先检查可选变量并逐行调试,以查看是否有任何可选变量完全没有您尝试解包的值

答案 2 :(得分:0)

你应该检查你的可选值, 我没有看到你的皮肤变量定义,但我认为下面的代码将解决你的问题

    Detailed Error Information:
Module     IIS Web Core
Notification       BeginRequest
Handler    Not yet determined
Error Code     0x800700a1
Config Error       Cannot read configuration file
Config File    \\?\UNC\NAS1\SharedStorage\WebApplications\Default\www\http:\web.config
Requested URL      http://localhost:80/http:/foo-bar.com
Physical Path      \\NAS1\SharedStorage\WebApplications\Default\www\http:\foo-bar.com
Logon Method       Not yet determined
Logon User     Not yet determined