我有一个全局设置变量(SettingsVariable.settingOne),在应用运行时期间由用户更改。我希望让用户永久更改,但是每次重新加载应用时,它都会恢复原始值,例如user将值更改为false,但是当重新运行应用程序时,变量值将更改回原始值。
当值改变时,调用以下代码(swift 2):
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "settingOne")
当应用关闭时:
func applicationWillTerminate(application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
NSUserDefaults.standardUserDefaults().setBool(SettingsVariables.settingOne, forKey: "settingOne")
}
然后再次打开应用程序:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
NSUserDefaults.standardUserDefaults().boolForKey("settingOne")
return true
}
但是,settingOne的值不断恢复为默认值' true'最初在应用程序中设置。
SettingsVariables.settingOne包含在struct:
中import UIKit
struct SettingsVariables {
static var settingOne = true
}
答案 0 :(得分:1)
您需要synchronize
保存NSUserDefaults
。
所以你的代码必须是
func applicationWillTerminate(application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
NSUserDefaults.standardUserDefaults().setBool(SettingsVariables.settingOne, forKey: "settingOne")
NSUserDefaults.standardUserDefaults().synchronize()
}
答案 1 :(得分:1)
您必须同步值NSUserDefaults.standardUserDefaults().synchronize()
答案 2 :(得分:0)
现在 Apple 文档建议使用 CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication)
而不是调用 UserDefaults.standard.synchronize()
,后者被标记为不推荐使用的方法。
答案 3 :(得分:-1)
这用于从NSUserDefaults获取元素,UserDataKey
只是Enum
func userDataForKey(key: UserDataKey) -> String? {
let userDefaults = NSUserDefaults.standardUserDefaults()
if let value: AnyObject = userDefaults.objectForKey(key.rawValue) {
return value as? String
} else {
return nil
}
}
这用于保存
func setUserData(value: AnyObject?, key: UserDataKey) -> () {
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(value, forKey: key.rawValue)
}