ios - Swift-继续获取 "fatal error: unexpectedly found nil while unwrapping an Optional value"

标签 ios swift cocoa-touch ios8

我使用 Swift 和 Xcode 6 才几个星期,但我已经在研究一个应用程序的想法了。我正在尝试开发的应用程序部分将如下所示: 1)用户有一个按钮网格,每个按钮在点击时都会执行不同的操作 2)用户可以点击 View 右下角的齿轮按钮,然后将以模态方式呈现一个新 View ,一个临时设置 Pane (标签和开关)。如果按钮名称标签上的开关关闭,则该按钮被隐藏。 3)用户点击“保存”按钮(目前与 NSUserDefaults 无关,或者与应用程序关闭后的实际保存功能无关,它目前实际上只是一个后退按钮),并且任何关闭的开关都会使其各自的按钮导出隐藏。

然而,实际项目运行是这样的: 1)完美运行 2)当我点击齿轮时,设置 Pane 会按计划出现。我还可以在各处滑动开关,但是当我点击“保存”按钮时,应用程序崩溃,并且我在控制台中收到“ fatal error :在展开可选值 (lldb) 时意外发现 nil”。

这是我的代码:

这是第一个 View Controller 的一部分,上面有按钮:

@IBAction func soundButton(sender: AnyObject) {
    var soundID: SystemSoundID = 0
    let soundFile: String = NSBundle.mainBundle().pathForResource("Sound", ofType: "wav")!
    let soundURL: NSURL = NSURL(fileURLWithPath: soundFile)!
    AudioServicesCreateSystemSoundID(soundURL, &soundID)
    AudioServicesPlaySystemSound(soundID)
}

上面是按下按钮时播放声音的 Action 。

现在这是按钮的导出和其边框的导出:

 @IBOutlet var soundOutlet: UIButton!
 @IBOutlet var soundRingOutlet: UIImageView!

在 Storyboard中,我有一个选项卡栏 Controller 和两个 View (ViewController 和 ViewControllerTwo),为了访问设置 View (SettingsViewController),我在右下角制作了一个带有齿轮图像的按钮,该按钮通过模态呈现的 segue 连接到设置 Pane 。这是 SettingsViewController 的部分代码:

//The switch
@IBOutlet var soundSwitch: UISwitch!

问题所在:

@IBAction func saveButton(sender: AnyObject) { if soundSwitch.on{
    (presentedViewController as! ViewController).soundOutlet.hidden = true} else {(presentedViewController as! ViewController).soundOutlet.hidden = false
    dismissViewControllerAnimated(true, completion: nil)
    }

问题是从“presentedViewController”的第二个实例变为“false” 非常令人沮丧的问题,我已经为此工作了几个小时,交换了代码,研究了这个,但似乎没有任何效果。显然我缺少一些东西,毕竟这只是在 View 之间交换数据。

更新:我已经将问题中的两个“presentedViewController”更改为“presentingViewController”。我在控制台中收到此错误消息:“无法将‘Buttons.TabBarViewController’(0x10d590d90)类型的值转换为‘Buttons.ViewController’(0x10d590e10)。 (lldb)” “Buttons”将是项目名称。

最佳答案

presentingViewController 是您的 tabBarViewController,而 presentedViewController 是您期望呈现的 ViewController,但实际上这个变量为 nil,因为在在您单击此按钮的时间点,模态视图 Controller 由于某种原因尚未设置 presentedViewController 变量,因此该变量实际上为 nil,当您尝试使用 as! ViewController 在一个 nil 变量上,你试图将 nil 转换成它不可能的东西,所以你会崩溃,你必须找到其他方法来获取将要显示的 viewcontroller

关于ios - Swift-继续获取 "fatal error: unexpectedly found nil while unwrapping an Optional value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31285047/

相关文章:

ios - 在用户登录时解析获取 facebook 个人资料图片

ios - Swift 3 : How to add watermark on video ? AVVideoCompositionCoreAnimationTool iOS 10 问题

Swift 方法需要分隔符

iphone - 我应该什么时候释放我的阵列?

objective-c - 获取数组中对象的 x、y 坐标

ios - 为什么 CIColorCube 没有在我的图像上实现?

ios - 如何遍历选项卡栏 Controller 中包含的每个导航 Controller

ios - 如何检查 UICollectionView 是否有下一页可以显示?

ios - 如何将 AVAudioRecorder 本地实例设置为 Property 以使其保持保留状态?

ios - 如何更新云套件中的数据