Swift:打开和关闭应用程序时未保存/加载用户默认值
Swift: User default values not being saved/ loaded when app is opened and closed
我有一个全局设置变量 (SettingsVariable.settingOne),它在应用程序运行时由用户更改。我想让用户永久更改,但目前每次重新加载应用程序时,它都会恢复为原始值,例如用户将值更改为 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 包含在结构中:
import UIKit
struct SettingsVariables {
static var settingOne = true
}
您需要提供 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()
}
您必须同步值 NSUserDefaults.standardUserDefaults().synchronize()
这是我用来从 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)
}
现在 Apple 文档建议使用 CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication)
而不是调用 UserDefaults.standard.synchronize()
,后者被标记为已弃用的方法。
我有一个全局设置变量 (SettingsVariable.settingOne),它在应用程序运行时由用户更改。我想让用户永久更改,但目前每次重新加载应用程序时,它都会恢复为原始值,例如用户将值更改为 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 包含在结构中:
import UIKit
struct SettingsVariables {
static var settingOne = true
}
您需要提供 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()
}
您必须同步值 NSUserDefaults.standardUserDefaults().synchronize()
这是我用来从 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)
}
现在 Apple 文档建议使用 CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication)
而不是调用 UserDefaults.standard.synchronize()
,后者被标记为已弃用的方法。