应用程序崩溃,除非 UISwitch 被移动一次以更改加载的数组

App crashes unless UISwitch has been moved once to change which Array is loaded

我的应用程序有一个 UISwitch,根据开关的位置,应用程序将选择需要哪个数组。如果我启动我的应用程序并在不移动开关的情况下使用它(将其留在 isOn 位置),该应用程序将崩溃。 (线程 1:致命错误:索引超出范围)

只要我动一下,它就会像我希望的那样发挥作用。这是代码:

import UIKit

var selectedRunesArray = [Rune]()

class SettingsViewController: UIViewController {

    @IBOutlet weak var allowReversedRunesSwitch: UISwitch!
    @IBOutlet weak var allowDuplicateRunesSwitch: UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

    }

    @IBAction func reversedRunesChanged(_ sender: UISwitch) {

        if allowReversedRunesSwitch.isOn == true {

            selectedRunesArray = runesIncReversedArray

        } else {
            selectedRunesArray = runesArray
        }

    }

    @IBAction func duplicateRunesChanged(_ sender: UISwitch) {

        if allowDuplicateRunesSwitch.isOn == true {



        } else {



        }

    }

}

我认为这里的问题可能是我在 selectedRunesArray 为空的情况下启动应用程序,因此决定给它一个初始值,如下所示:

var seletcedRunesArray = runesIncReversedArray

当您在不移动开关的情况下尝试使用它时,这会阻止应用程序崩溃,但现在它不会像我希望的那样根据开关状态在 2 个阵列之间切换。

reversedRunesChanged 方法将不会被调用,直到你改变开关的状态。

所以,你只需要在viewdidload中定义你想要第一次加载的数组。您可以使用:

这个

selectedRunesArray = runesIncReversedArray

selectedRunesArray = runesArray

你也可以通过在 viewdidload 方法中获取开关状态来做到这一点,方法是将其放入 viewdidload

if allowReversedRunesSwitch.isOn == true {

            selectedRunesArray = runesIncReversedArray

} else {
            selectedRunesArray = runesArray
}