NSUserDefaults没有被保存 - 逻辑错误?

时间:2016-02-16 01:45:08

标签: swift macos cocoa nsuserdefaults

这是我程序中的一个奇怪的错误,我认为这是我的逻辑错误,或者我在滥用某些东西。

简明扼要地说,当一个值输入到NSTextField时,它不会保存,而是设置为该TextField的placeholderValue。第二次加载SavePreferences视图并运行save函数时,placeholderValue的值将写入NSUserDefaults。我想绕过那个中间步骤,并且第一次直接将NSTextField的值写入NSUserDefaults。

我想在NSUserDefaults中保存一个值。打开SavePreferences窗口时会发生的情况是该值未保存,而是设置为占位符值。再次打开首选项视图时,placeholderString包含该值。在此时点击btnSaveApiKey.synchronize()和/或.setObject())时,会写入占位符值。

我是否在调用某些函数,或者我应该在SavePreferences类中添加一些函数来处理某些我不知道的Cocoa事件?

import Cocoa

class SavePreferences: NSViewController {
@IBOutlet weak var apiKeySavedText: NSTextField!
let userApiKeyConstant = "userApiKey"
let defaults = NSUserDefaults.standardUserDefaults()
var apiKeyTitle = NSUserDefaults.standardUserDefaults().stringForKey("userApiKey")

//MARK textfield for api key
@IBOutlet weak var textFieldApiKey: NSTextField!

//MARK save API Key as default preference

// SAVE FUNCTION
@IBAction func btnSaveApiKey(sender: AnyObject) {

    //save NSUserDefaults value
    defaults.setObject(self.textFieldApiKey.stringValue, forKey: userApiKeyConstant)

    // force save of NSUserDefaults with synchronize()
    defaults.synchronize()

    print("apikey saved as",  self.apiKeyTitle)
    apiKeySavedText.hidden = false
}

override func viewDidLoad() {
    super.viewDidLoad()
    apiKeySavedText.hidden = true
    if(self.defaults.valueForKey(userApiKeyConstant) != nil) {
        textFieldApiKey.placeholderString = self.defaults.stringForKey(userApiKeyConstant)
    }
  }
}

1 个答案:

答案 0 :(得分:1)

我认为你很困惑,因为你的保存功能不会打印保存的字符串。这是因为你在开始时声明了一次apiKeyTitle。所以,这总是你之前保存的。要访问当前值,请更改以下内容

print("apikey saved as",  self.apiKeyTitle)

print("apikey saved as ", defaults.stringForKey(userApiKeyConstant))

并删除

var apiKeyTitle = NSUserDefaults.standardUserDefaults().stringForKey("userApiKey")

变量,以防您在代码中的其他位置不需要它。