我正在使用+[NSUserDefaults standardUserDefaults]
来存储应用程序设置,其中包含大约十几个字符串值。是否可能永久删除这些值而不仅仅是将它们设置为默认值?
我正在使用+[NSUserDefaults standardUserDefaults]
来存储应用程序设置,其中包含大约十几个字符串值。是否可能永久删除这些值而不仅仅是将它们设置为默认值?
这可能是一个bug,但是使用removePersistentDomainForName
无法清除所有的NSUserDefaults
值。
因此,更好的选择是重置PersistentDomain
,可以通过以下方式实现:
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
以上所有答案都非常相关,但如果有人仍然无法重置已删除应用程序的userdefaults,则可以重置模拟器的内容设置,它将起作用。
在 @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:将返回一个字典,它可能包括其他设置,因为它适用于更广泛的范围。
如果您需要过滤任何要重置的值,则迭代键是做此操作的方法。显然,如果您想毫不考虑地清除应用程序的所有首选项,则上面发布的其他方法中的一种最有效。
试试这个,对我来说有效。
一行代码。
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
如果需要重置的应用程序设置是用于访问麦克风的nsuserdefault(我的情况),一个简单的解决方案是来自Anthony McCormick的答案(Iphone - How to enable application access to media on the device? - ALAssetsLibraryErrorDomain Code=-3312 "Global denied access")。
在设备上,转到“设置”>“通用”>“重置”>“重置位置警告”。