【问题标题】:Error working with NSUserDefaults使用 NSUserDefaults 时出错
【发布时间】:2016-04-06 18:00:09
【问题描述】:

我已经为此苦苦思索了好几个小时!我只是想更新一个NSUserDefault 整数值。

我的代码有什么问题?这是我得到的例外:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Wenger1.ViewController defaultsChanged]:无法识别的选择器发送到实例 0x7ffe1ae2b540”

代码:

class ViewController: UIViewController {

    var fod = 0

override func viewDidLoad() {
    super.viewDidLoad()

    let prefs = NSUserDefaults.standardUserDefaults()

    // load fod
    if  prefs.stringForKey("userFOD") != nil {
        FodValue.text = String (prefs.valueForKey("userFOD"))

        // FodValue.text = String (fod)
        print("fod: \(fod)")
        }
}

@IBAction func FOD(sender: AnyObject) {
    fod =  Int(FodValue.text!)!
    //Store fod value
    let prefsFOD = NSUserDefaults.standardUserDefaults()
    prefsFOD.setInteger(fod, forKey: "userFOD") // FAIL HERE...
}

【问题讨论】:

  • 什么是defaultsChanged?先前定义的功能是否仍与按钮操作相关联?你是从stackoverflow.com/questions/3927402/…这里得到的吗?你注册通知了吗?
  • 谢谢! :-) 与 NotificationCenter 相关的代码导致了问题: NSNotificationCenter.defaultCenter().addObserver(self, selector: "defaultsChanged", name: NSUserDefaultsDidChangeNotification, object: nil)

标签: ios swift nsuserdefaults


【解决方案1】:

通过查看您的代码,我无法知道基本问题是什么。但是,我可以为您提供修改后的代码版本。给你-

var fod = 0
let userFODKey = "userFODKey"
let stUserDefaults = NSUserDefaults.standardUserDefaults()

func fetchFodFromUserDefaults() -> Int? {

    if let fod = stUserDefaults.valueForKey(userFODKey) as? Int {
        print("fod: \(fod)")
        return fod
    }
    return nil
}


func saveFodToUserDefaults(fodString: String) {

    if let fodInt = Int(fodString) {
        fod = fodInt
        stUserDefaults.setInteger(fod, forKey: userFODKey)
    }
}

提供数据调用

saveFodToUserDefaults("yourUIElementTextString")

获取数据调用

let value: Int? = fetchFodFromUserDefaults()

【讨论】:

  • 这不会试图回答这个问题。
【解决方案2】:

您正在设置 integer 并从 NSUserDefault 获取 string 值以获取密钥 userFOD。我认为这是一个错误。

【讨论】:

  • 不,这与 actual 错误无关。错误是关于调用[Wenger1.ViewController defaultsChanged]
  • 我必须说,但你已经仔细检查了代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多