swift - NSUserDefaults 未保存 - 逻辑错误?

标签 swift macos cocoa nsuserdefaults

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

简而言之,当在 NSTextField 中输入值时,该值不会保存,而是设置为该 TextField 的 placeholderValue。第二次加载 SavePreferences View 并运行保存函数时,placeholderValue 的值将写入 NSUserDefaults。我想绕过中间步骤,第一次直接将 NSTextField 的值写入 NSUserDefaults 。

我正在尝试在 NSUserDefaults 中保存一个值。打开 SavePreferences 窗口时会发生的情况是该值未保存,而是设置为占位符值。当再次打开首选项 View 时,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)
    }
  }
}

最佳答案

我假设您很困惑,因为您的保存函数不会打印保存的字符串。这是因为您一开始就声明了 apiKeyTitle 一次。所以,这始终是您之前保存的内容。要访问当前值,请更改以下内容

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

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

并删除

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

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

关于swift - NSUserDefaults 未保存 - 逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35422235/

相关文章:

iOS 13.1 AVAudio 播放器崩溃

macos - 应用程序如何悄悄地判断它是否在沙箱中运行?

python - setup.py 未在 mac osx 中创建正确的文件夹/配置?

regex - 用 perl 解析 scutil 输出

objective-c - NSTextView 中是否可以有 float 图像或文本框,或者我将使用什么来做到这一点?

cocoa - 将动画添加到框架代理或 CALayer 之间的区别

swift - 如何为 AppDelegate 编写单元测试?

ios - Swift - 将结构数组的值相加

swift - 如何找到 NSTimer 剩余的时间间隔

objective-c - 使用未检测/定义的拖放跟踪区域时