如何在Objective-C中清除所有NSUserDefaults值?

5

我在我的应用中经常使用NSUserDefaults来存储一些值,但是当用户点击“刷新”按钮时,我想清除所有的存储值。有没有办法清除所有的NSUserDefaults值?

2个回答

14
可以使用以下代码删除所有存储的值,详细信息请参见此处
- (void)removeUserDefaults 
{
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    NSDictionary * dict = [userDefaults dictionaryRepresentation];
    for (id key in dict) {
        [userDefaults removeObjectForKey:key];
    }
    [userDefaults synchronize];
}

或者说最简单的方式

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

Swift(苹果公司的编程语言)

let defaults = UserDefaults.standard
defaults.dictionaryRepresentation().keys.forEach { (key) in
    defaults.removeObject(forKey: key)
}

单行代码解决方案对我不起作用。然而,removeUserDefaults()函数可以胜任这项工作。 - C1pher

5
您可以使用以下语句清除用户默认设置 -
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

您可以在刷新按钮上调用选择器,并将上述语句保留在其中,如下所示-
- (void) refreshUserDefaults
{
    NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
}

你的第二个选项在这里是无效的,看起来你误解了问题。这不是被问到的内容,他们明确指出在按下重置按钮时要清除NSUserDefaults,那么在应用程序中按下重置按钮会如何导致第二种情况发生呢? - Popeye
没关系,至少你看到了自己的错误。 - Popeye

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