如何快速自动清除 NSUserDefault 值?
How to auto clear NSUserDefault values in swift?
如何在 swift 中自动清除 nsuserdefault
值?我已经尝试过了,但它对我不起作用...
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
没有"auto clear"。只需获取所有现有的 NSUserDefaults 键并将它们全部设置为 nil。
要获取所有密钥,请获取 NSUserDefaults dictionaryRepresentation
并获取其 keys
(allKeys
in Objective-C)。
检查已经存储了多少个密钥
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
再添加一个键
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
再次检查已存储的密钥数量 (+2)
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
现在创建一个循环来删除键的对象
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
再检查一下你有多少把钥匙
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
更新:Xcode 7.2.1 • Swift 2.1.1(注意 NSUserDefaults 不再在操场上工作,所以它需要在真实项目中测试)
print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
}
print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
您的 objective-c 代码的 swift 副本是这个
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Swift 3.0 及更高版本
let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
defaults.setObject(nil, forKey: "userEmail")
这样做,你输入了 nil,所以你清除了
Swift 3.0 解
let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
如何在 swift 中自动清除 nsuserdefault
值?我已经尝试过了,但它对我不起作用...
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
没有"auto clear"。只需获取所有现有的 NSUserDefaults 键并将它们全部设置为 nil。
要获取所有密钥,请获取 NSUserDefaults dictionaryRepresentation
并获取其 keys
(allKeys
in Objective-C)。
检查已经存储了多少个密钥
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
再添加一个键
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
再次检查已存储的密钥数量 (+2)
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
现在创建一个循环来删除键的对象
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
再检查一下你有多少把钥匙
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
更新:Xcode 7.2.1 • Swift 2.1.1(注意 NSUserDefaults 不再在操场上工作,所以它需要在真实项目中测试)
print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
}
print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
您的 objective-c 代码的 swift 副本是这个
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Swift 3.0 及更高版本
let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
defaults.setObject(nil, forKey: "userEmail")
这样做,你输入了 nil,所以你清除了
Swift 3.0 解
let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)