【问题标题】:UISwitch Throwing Fault SwiftUISwitch 引发故障 Swift
【发布时间】:2023-10-03 17:34:01
【问题描述】:

全部。

我已经浏览了一遍,努力寻找答案。对于我的一生,我知道我可以解决这个问题,但是,我正在苦苦挣扎。

以下代码执行并将 changeURL 推送到另一个视图控制器。这个 changeURL 变量设置为“if”语句,其中 true 将一个字符串附加到 URL,false 附加另一个。

API 工作正常。一切正常。

但是,当我加载 UISwitch 下方的初始视图时,它已经打开。我按回车键,我得到填充内容的返回表视图。

import UIKit

class DashboardViewController: UIViewController {

    @IBOutlet weak var warningLabel: UILabel!
    @IBOutlet weak var clickToEnterButton: UIButton!
    @IBOutlet weak var explicitSwitch: UISwitch!

    //    @IBAction func urlSwitch(_ sender: UISwitch) {
    //        performSegue(withIdentifier: "goToTableView", sender: explicitSwitch)
    //    }
    @IBAction func enterButton(_ sender: UIButton) {
        performSegue(withIdentifier: "goToTableView", sender: clickToEnterButton)

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.destination is JokesTableViewController {
            let vc = segue.destination as? JokesTableViewController
            vc?.changeURL = explicitSwitch.isOn
        }
    }
}

如果我随后将 UISwitch 切换到“关闭”位置,则会引发故障。

'invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.'

我知道开关正在工作,因为如果我在访问视图后将开关设置为 false,然后再次单击 Enter,它会向我显示第二个 API - 下面的代码。

import UIKit

class DashboardViewController: UIViewController {

    @IBOutlet weak var warningLabel: UILabel!
    @IBOutlet weak var clickToEnterButton: UIButton!
    @IBOutlet weak var explicitSwitch: UISwitch!

    //    @IBAction func urlSwitch(_ sender: UISwitch) {
    //        performSegue(withIdentifier: "goToTableView", sender: explicitSwitch)
    //    }
    @IBAction func enterButton(_ sender: UIButton) {
        performSegue(withIdentifier: "goToTableView", sender: clickToEnterButton)

    }

    func explicitSwitchOff(){
        explicitSwitch.setOn(false, animated: true)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.destination is JokesTableViewController {
            let vc = segue.destination as? JokesTableViewController
            vc?.changeURL = explicitSwitch.isOn
            explicitSwitchOff()
        }
    }
}

理想情况下,我认为我需要将开关的值(真或假)与 UISwitch 操作分开。然后将其附加到 UIButton 操作?

高度赞赏任何想法。

谢谢。

【问题讨论】:

  • 嗨,基尚。我确实遇到了那个解决方案。我在没有视觉帮助的情况下很难理解它!

标签: ios swift generics ios13 uiswitch


【解决方案1】:

谢谢,我已经找到答案了。

原来 UISwitch 仍然被声明为一个不存在的变量!

经验教训。

【讨论】: