这是我一直有的问题,而且我无法在任何地方找到解决我的问题的任何事情,基本上我正在进行的是一个创建活动场景,并且我有一个UISwitch应该在我的CreateEventViewController中切换,并为该设置调出一个视图控制器,这是我的SetCountdownViewController,但它我想在SetCountdownViewController中有一个取消按钮,它取消了SetCountdownViewController并切换了我的UISwitch关闭,但到目前为止,我已经提出了一些错误和错误。
我查了几个教程,他们都告诉我使用someSwitch.on
和someSwitch.setOn([state, true/false], animated:[true/false])
并且两者似乎都在工作,没有错误弹出,我可以构建和运行,但是当我去测试我的功能并按下我的取消按钮时,它会给我一个错误说"线程1:EXC_BAD_INSTRUCTION (code = EXC_i386_INVOP,subcode = 0x0)"在线上说" countdownSetSwitch.setOn(false,animated:true) "
以及"致命错误:在打开可选值时意外发现nil"在我的日志里面。
我有一个应该将其重置为false的函数,但那是发生错误的地方,无论我放置.setOn或.on的方式/位置,它都会给我这个错误,看起来好像这些可能被弃用,但它们在某种程度上可用于构建/运行,直到实际调用它们为止。
func resetCountdownSwitch(){
countdownSetSwitch.setOn(false, animated: true)
}
这就是我的功能。
我在我的IBAction中为我的取消按钮调用它。
@IBAction func countdownCancelButton(sender: AnyObject) {
createEventVC.resetCountdownSwitch()
dismissViewControllerAnimated(true, completion: nil)
}
任何帮助都会很棒,如果你需要更多的信息,我很乐意给它,我对Swift和整个iOS开发相当新,所以这可能是一个新手的错误,但我'我很难过。
答案 0 :(得分:1)
在视图控制器不再可见之后维护对视图控制器的引用(因为已经呈现了另一个视图控制器)并不保证视图控制器及其子视图不会被释放。检查this reference以了解视图生命周期的工作原理。
您可能想要做的是在CreateEventViewController的viewWillAppear方法中检查您需要的状态,并在那里设置切换的值。没有必要为它设置动画,因为它还不可见。如果您真的想要使翻转动画,请添加代码以检查您的状态并在viewDidAppear中配置按钮。
您的崩溃可能是因为当您调用resetCountdownSwitch()时createEventVC的子视图不再存在,并且当您调用countdownSetSwitch.setOn时,实际上是使用nil调用该函数。