Это странная ошибка в моей программе, которая, по моему мнению, является логической ошибкой с моей стороны, или я что-то злоупотребляю.NSUserDefaults не сохраняется - логическая ошибка?
Положительно, когда значение вводится в NSTextField, оно не сохраняется, а вместо этого устанавливается как placeholderValue этого TextField. Во второй раз, когда загружается представление SavePreferences и выполняется функция сохранения, значение placeholderValue записывается в NSUserDefaults. Я хочу обойти этот средний шаг и просто записать значение NSTextField непосредственно в NSUserDefaults в первый раз.
Я пытаюсь сохранить значение в NSUserDefaults
. Что происходит, когда открывается окно SavePreferences, это значение не сохраняется, а скорее задается как значение-заполнитель. Когда представление настроек снова открывается, placeholderString содержит значение. Именно в этот момент, когда нажимается btnSaveApiKey
(.synchronize()
и/или .setObject()
), записывается значение заполнитель.
Я вызываю некоторые функции из строя или должен добавить некоторые функции в мой класс SavePreferences для обработки какого-то события какао, о котором я не знаю?
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)
}
}
}
Обратите внимание, что использование синхронизации больше не требуется, и теперь Apple не обескураживает. Тем не менее, я не понимаю ваш вопрос. Вы говорите, что при запуске 'btnSaveApiKey' значения' NSUserDefaults' не установлены? – Michael
Спасибо, Майкл. Это как-то хранится где-то, потому что, когда представление загружается снова, оно появляется в тексте-заполнителе текстового поля. Однако он не хранится в NSUserDefaults. Только после того, как он установлен в качестве текста заполнителя, btnSaveApiKey записывает значение в NSUserDefaults. – user43633
Но я не понимаю, чего ты хочешь. На данный момент вы читаете NSUserDefaults и помещаете его в заполнитель, который, как я полагаю, работает. Затем вы нажимаете кнопку и записываете текущее текстовое значение (т. Е. Не заполнитель) обратно в NSUserDefaults. Если вы снова запустите, заполнитель должен появиться со значением, которое вы ввели и сохранили ранее. Это то, что вы хотите, а какая часть не работает? Или вы говорите, что не можете найти его в местоположении NSUserDefaults, и в этом случае, возможно, вы ищете не то место. – Michael