触发 segue 时出错"fatal error: unexpectedly found nil while unwrapping an Optional value"



我添加了一个segue到我的应用程序,当我启动segue时,应用程序在iPhone 5S模拟器中崩溃(在其他模拟器中,它在此之前崩溃,因为特定于设备的代码。这里是问题的链接),消息"致命错误:在展开可选值时意外发现nil"被打印到控制台,并且错误Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)显示在初始化数组的行上。我认为原因是因为我有一个UIImageView的动画需要展开包装。我是这样做的:

// dieImages are UIImageViews that I am animating then displaying a random image of a die
    let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
// Die animation
                for die in dieImages {
                    die.animationImages = [  <====== Error on this line
                        UIImage(named: "dicey-die2")!,
                        UIImage(named: "dicey-die6")!,
                        UIImage(named: "dicey-die1")!,
                        UIImage(named: "dicey-die4")!,
                        UIImage(named: "dicey-die3")!,
                        UIImage(named: "dicey-die5")!,
                        UIImage(named: "dicey-die3")!,
                        UIImage(named: "dicey-die1")!,
                        UIImage(named: "dicey-die6")!,
                        UIImage(named: "dicey-die3")!,
                        UIImage(named: "dicey-die5")!,
                        UIImage(named: "dicey-die2")!,
                        UIImage(named: "dicey-die4")!
                    ]
                die.animationRepeatCount = 1
                die.animationDuration = 1.0
            }

但是segue的类型是AnyObject所以我认为这就是unwind不起作用的原因:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {}

如何安全地展开图像,或者在segue被触发时不展开图像?我已经看到了使用两个问号的方法(但这会导致"无法找到接受所提供参数的'init'过载"的错误)或if语句,但我不知道如何实现。

更新

我尝试了这段代码,结果和之前的

一样
        let image0 = UIImage(named: "dicey-die1")!
        let image1 = UIImage(named: "dicey-die2")!
        let image2 = UIImage(named: "dicey-die3")!
        let image3 = UIImage(named: "dicey-die4")!
        let image4 = UIImage(named: "dicey-die5")!
        let image5 = UIImage(named: "dicey-die6")!
        let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
        for die in dieImages {
            die.animationImages = [
                image1,
                image5,
                image0,
                image3,
                image2,
                image4,
                image2,
                image0,
                image5,
                image2,
                image4,
                image1,
                image2
            ]
            die.animationRepeatCount = 1
            die.animationDuration = 1.0
        }

更新2

我创建了一个包含所有图像的数组

let image0:[UIImage] = [ UIImage(named: "dicey-die2")!,
            UIImage(named: "dicey-die6")!,
            UIImage(named: "dicey-die1")!,
            UIImage(named: "dicey-die4")!,
            UIImage(named: "dicey-die3")!,
            UIImage(named: "dicey-die5")!,
            UIImage(named: "dicey-die3")!,
            UIImage(named: "dicey-die1")!,
            UIImage(named: "dicey-die6")!,
            UIImage(named: "dicey-die3")!,
            UIImage(named: "dicey-die5")!,
            UIImage(named: "dicey-die2")!,
            UIImage(named: "dicey-die3")!]

然后我在动画

中使用数组
for die in dieImages {
    die.animationImages = [
      image0
    ]

应用程序在AppDelegate崩溃,所以我添加了一个异常断点,崩溃发生在动画数组:

die.animationImages = [

这条消息被打印到控制台:

2015-09-08 07:23:05.192 Diced[80843:14927078] -[Swift._SwiftDeferredNSArray _isResizable]: unrecognized selector sent to instance 0x7fa738dd7460

最好的办法是这些图像是不可用的。

一个简单的测试,完成这个工作并实例化图像:

let image = UIImage(named: "dicey-die2")!

如果没有,你如何将图像添加到项目?

相关内容

最新更新