如何清除NSUserDefaults数据?

3
当我在应用中的语言选择列表中选择语言时,它会显示我之前选择的语言。如果我从模拟器堆栈中清除应用程序或从xcode中清除应用程序,然后运行项目,那么一切都正常,如果我想再次更改语言,那么我会遇到同样的问题。我的代码如下:
- (IBAction)English:(id)sender {

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
[userDefault synchronize];

ChooseItemVC *civc = (ChooseItemVC*)[self.storyboard instantiateViewControllerWithIdentifier:@"ChooseItemVC"];
[self.navigationController pushViewController:civc animated:YES];
}

另一种语言选择代码:

- (IBAction)Arabic:(id)sender {

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:[NSArray arrayWithObjects:@"ar", nil] forKey:@"AppleLanguages"];
[userDefault synchronize];

ChooseItemVC *civc = (ChooseItemVC*)[self.storyboard instantiateViewControllerWithIdentifier:@"ChooseItemVC"];
[self.navigationController pushViewController:civc animated:YES];

}

1
“清除应用”是什么意思?因为当您关闭应用程序并再次运行应用程序时,偏好设置仍然存在。 - Nirav Kotecha
我也不太明白,你是想删除整个UserDefaults字典(所有键+所有值)吗?还是只删除特定的值?或者只删除特定的键?或者是删除特定的键和值? - Joe Razon
5个回答

4

删除所有用户默认值的最佳方法如下: Swift 代码:

UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)

UserDefaults.standard.synchronize()

Objective C

NSString *strIdentifier = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:strIdentifier];;
[[NSUserDefaults standardUserDefaults] synchronize];

调用synchronize是不必要的。 - rmaddy

1

使用以下代码删除用户默认值中的所有现有数据,我正在发布Swift代码,请将其转换为Objective-C。

  if let bundleID = Bundle.main.bundleIdentifier {
            UserDefaults.standard.removePersistentDomain(forName: bundleID)
        }

0

NSUserDefaults中删除您的数据

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"];

0

使用此代码可进行删除操作

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
    [[NSUserDefaults standardUserDefaults] synchronize];

你可以使用 removeObjectForKey,因为他想要删除单个对象,而不是全部。 - Nirav Kotecha
1
调用synchronize是不必要的。 - rmaddy

0

如果要从NSUserDefaults中删除数据,请尝试以下方法:

        NSString *AppDomain = [[NSBundle mainBundle] bundleIdentifier];
        [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:AppDomain];

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