清除NSUserDefaults

292

我正在使用+[NSUserDefaults standardUserDefaults]来存储应用程序设置,其中包含大约十几个字符串值。是否可能永久删除这些值而不仅仅是将它们设置为默认值?


1
从NSUserDefaults中删除所有键 - Hemang
15个回答

2

这可能是一个bug,但是使用removePersistentDomainForName无法清除所有的NSUserDefaults值。

因此,更好的选择是重置PersistentDomain,可以通过以下方式实现:

NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)

2

以上所有答案都非常相关,但如果有人仍然无法重置已删除应用程序的userdefaults,则可以重置模拟器的内容设置,它将起作用。在此输入图片描述


不太容易适用于 macOS。 - Sentry.co

1

在 @folse 的回答基础上进行拓展... 我认为更正确的实现方式应该是...

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
    for (NSString *key in [defaultsDictionary allKeys]) {
      NSLog(@"removing user pref for %@", key);
      [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
    }

...调用NSUserDefault的persistentDomainForName:方法。如文档所述,该方法“返回一个包含指定持久域中键和值的字典”。相反,调用dictionaryRepresentation:将返回一个字典,它可能包括其他设置,因为它适用于更广泛的范围。

如果您需要过滤任何要重置的值,则迭代键是做此操作的方法。显然,如果您想毫不考虑地清除应用程序的所有首选项,则上面发布的其他方法中的一种最有效。


0

试试这个,对我来说有效。

一行代码。

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接