22

如何nsuserdefault快速自动清除值?我已经尝试过这个,但它对我不起作用......

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
4

5 回答 5

71

您的objective-c代码的快速对应物是这个

 let appDomain = NSBundle.mainBundle().bundleIdentifier!

 NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

Swift 3.0 及更高版本

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
于 2015-04-02T13:16:31.947 回答
37

检查已经存储了多少密钥

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 不再在 Playground 中工作,因此需要在实际项目中进行测试)

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)
于 2015-01-08T05:09:11.610 回答
7

Swift 3.0 解决方案

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain) 
于 2016-10-14T09:23:16.487 回答
6
defaults.setObject(nil, forKey: "userEmail")

这样做,你把 nil,所以你清除

于 2015-11-12T18:07:57.853 回答
1

没有“自动清除”。只需获取所有现有的 NSUserDefaults 键并将它们全部设置为零。

要获取所有密钥,请获取 NSUserDefaultsdictionaryRepresentation并获取其keysallKeys在 Objective-C 中)。

于 2015-01-08T04:35:28.820 回答