NSUserDefaults 未保存 - 逻辑错误?
NSUserDefaults not being saved - logic error?
这是我程序中的一个 st运行ge 错误,我认为这是我的逻辑错误,或者我误用了某些东西。
简而言之,当一个值被输入到 NSTextField 中时,它不会被保存,而是被设置为该 TextField 的 placeholderValue。第二次加载SavePreferences视图,保存函数为运行,将placeholderValue的值写入NSUserDefaults。我想绕过中间那一步,第一次直接把 NSTextField 的值写入 NSUserDefaults。
我正在尝试在 NSUserDefaults
中保存一个值。打开 SavePreferences window 时发生的情况是该值未保存,而是设置为占位符值。再次打开首选项视图时,placeholderString 包含该值。正是在这个时候点击btnSaveApiKey
(.synchronize()
and/or .setObject()
),占位符值被写入
我是不是乱序调用了一些函数,或者我应该向我的 SavePreferences 添加一些函数 class 来处理我不知道的某种 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")
变量,以防您在代码中的其他地方不需要它。
这是我程序中的一个 st运行ge 错误,我认为这是我的逻辑错误,或者我误用了某些东西。
简而言之,当一个值被输入到 NSTextField 中时,它不会被保存,而是被设置为该 TextField 的 placeholderValue。第二次加载SavePreferences视图,保存函数为运行,将placeholderValue的值写入NSUserDefaults。我想绕过中间那一步,第一次直接把 NSTextField 的值写入 NSUserDefaults。
我正在尝试在 NSUserDefaults
中保存一个值。打开 SavePreferences window 时发生的情况是该值未保存,而是设置为占位符值。再次打开首选项视图时,placeholderString 包含该值。正是在这个时候点击btnSaveApiKey
(.synchronize()
and/or .setObject()
),占位符值被写入
我是不是乱序调用了一些函数,或者我应该向我的 SavePreferences 添加一些函数 class 来处理我不知道的某种 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")
变量,以防您在代码中的其他地方不需要它。