当我从应用程序注销时,如何从一个地方删除所有变量值?与NSUserDefaults
类似,我们使用以下代码:
/*===CLEAR ALL NSUSERDEFAULTS====*/
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
答案 0 :(得分:2)
从设计点开始,创建一个处理所有设置的类 - 例如我在我的项目中有XUPreferences
并将所有设置存储在一个地方(通常是一个具有各种变量的类,将其值委托给NSUserDefaults
)。除了在命名空间周围没有各种默认键,你可以很好地概述应用程序设置的所有内容。
在这个课程中,您可以使用func clearAllPreferences()
方法,可以(各种选项):
resetStandardUserDefaults()
NSUserDefaults
类方法
removeObjectForKey:
NSUserDefaults
方法
XU
为我的所有默认密钥添加前缀),您可以通过查看NSUserDefaults.standardUserDefaults().dictionaryRepresentation()
中的密钥并将其与前缀匹配来自动执行此操作。func removeSuiteNamed()
上调用NSUserDefaults
- 这可能是最好的方法,因为它可以让您区分会话 - 相关和非会话相关的设置,只擦除与会话相关的设置。编辑:
/// Key in defaults for myOption
private let XUMyOptionDefaultsKey = "XUMyOption"
public class XUPreferences {
/// Shared instance
public static var sharedPreferences = XUPreferences()
/// Your option, purely based on the values in NSUserDefaults.
public var myOption: Bool {
get {
return NSUserDefaults.standardUserDefaults().boolForKey(XUMyOptionDefaultsKey)
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: XUMyOptionDefaultsKey)
}
}
/// Clears preferences.
public func clearPreferences1() {
let defaults = NSUserDefaults.standardUserDefaults()
for (key, _) in defaults.dictionaryRepresentation() {
// All keys are prefixed with XU
if key.hasPrefix("XU") {
defaults.removeObjectForKey(key)
}
}
}
/// Clears preferences another way
public func clearPreferences2() {
let defaults = NSUserDefaults.standardUserDefaults()
for key in [ XUMyOptionDefaultsKey /**, all keys for your options go here. */ ] {
defaults.removeObjectForKey(key)
}
}
}
// Usage:
// x is now false (most likely)
var x = XUPreferences.sharedPreferences.myOption
// Change the option to true
XUPreferences.sharedPreferences.myOption = true
XUPreferences.sharedPreferences.clearPreferences1()
// False again, since we've cleared the preferences.
x = XUPreferences.sharedPreferences.myOption
答案 1 :(得分:1)
创建一个由登录用户的所有属性组成的类(要在注销时清除)
最好的方法是使用dispatch创建一次共享实例,而不是需要重置属性时重置调度 onceToken
这是目标C中的示例代码
static dispatch_once_t onceToken;
+ (id)sharedInstance
{
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
+ (void)clearMemberInfo
{
// [[NSNotificationCenter defaultCenter] removeObserver:self];
//instance = nil;
onceToken = 0;
}