【问题标题】:Filling textfields with text when a switch is activated激活开关时用文本填充文本字段
【发布时间】:2015-05-20 02:07:59
【问题描述】:

当我打开开关时,我正在尝试用我存储在其他页面之一的 NSUserDefaults 变量中的文本填充文本字段。当我打开开关时,我收到“无法识别的选择器发送到实例”的错误消息。这是我拥有的代码,它给了我错误。 gamesListText 是我已经有数据的 NSUserDefaults 变量。

@IBAction func switchActivated(sender: AnyObject) {

    if switch.on {
        gameSearchLabel.text = gameListText
    }
}

我看过其他遇到此错误的人,但没有一个人真正适用于我的特定情况,而且他们的问题已经过时了。

【问题讨论】:

  • @IBOutlet var preferenceSwitch: UISwitch!
  • 我刚刚为我的开关做了一个基本的插座@IBOutlet var preferenceSwitch: UISwitch!。我的 gamesListText 是一个全局字符串 var gamesListText = ""。然后在我的 viewDidLoad 函数中将 gamesListText = NSUserDefaults.standardUserDefaults().objectForKey("gamesListText") 设置为!细绳。在我设置 gamesListText 后,我​​将它附加到一个文本字段,以便它等于我在文本字段中输入的任何内容,最后每次按下我的保存按钮时它都会更新。
  • @IBAction func saveButton(sender: AnyObject) { gamesListText = gamesListTextField.text NSUserDefaults.standardUserDefaults().setObject(gamesListText, forKey: "gamesListText") }
  • 只需删除您的 IBOutlet。您可以使用 IBAction 中的发件人
  • 我试过它给出了一个错误 AnyObject does not have a member of 'on'

标签: swift compiler-errors nsuserdefaults


【解决方案1】:
@IBAction func switchActivated(sender: UISwitch) {
    if sender.on {
        gameSearchLabel.text = gameListText
    }
}

在你的 viewDidLoad

gamesListText = NSUserDefaults.standardUserDefaults().stringForKey("gamesListText") ?? ""

【讨论】:

  • 这解决了问题,感谢 Leo 的帮助,感谢大家对 cme​​ts 的感谢
【解决方案2】:

将您的插座重命名为 switch 以外的名称。 Swift 认为您正在尝试定义 switch statement

@IBOutlet weak var switchOutlet: UISwitch!
@IBAction func switchAction(sender: AnyObject) {
    if switchOutlet.on {
        println("switch is ON")
    }
    else {
        println("switch is OFF")
    }
}

此外,在设置/获取NSUserDefaults 时,您应该使用stringForKey 而不是objectForKey,因为您正在设置/获取String 类型。

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2017-09-26
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多