应用程序崩溃,除非 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
}
我的应用程序有一个 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
}