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

标签 ios swift crash segue forced-unwrapping

我在我的应用程序中添加了一个 segue,当我触发 segue 时,应用程序在 iPhone 5S 模拟器中崩溃(在其他模拟器中,它在此之前崩溃,因为代码特定于设备。Here 是问题的链接) ,消息“fatal error: unwrapping an Optional value unwrapping an Optional value”被打印到控制台并且错误 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 类型,所以我认为这就是解包不起作用的原因:

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")!

如果不是,您如何将图像添加到项目中?

关于ios - 触发 segue 时出现错误 "fatal error: unexpectedly found nil while unwrapping an Optional value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32443045/

相关文章:

ios - 如何在iOS13的iPad上以iPhone风格呈现actionSheet?

swift - UIPageViewController 在快速向前和向后滚动时,索引未打印正确

Android 应用程序在尝试从库项目加载布局时崩溃

ios - iOS崩溃追随者

iphone - iPhone 上的访问崩溃日志数据

ios - 如果显示在窗口上,MBProgressHUD 无法更改文本

ios - 等到 In App Purchase 完成,直到执行操作

滚动后 iOS UITableViewCell 无法正确更新

swift - Coredata 的 CodeGen 'manual/none + create NSManagedObject subclass' 与 'category/extension' 之间的功能差异是什么

iOS : How to check if date-time selected is valid time during day light savings?