如何在NSUserDefaults中删除用户默认值?


79

即,我的应用程序在开始时设置了一些标准默认值。然后,这些值可能会被用户覆盖。当用户搞砸时,我想将这些设置恢复为我的应用默认值。据我了解,应用程序默认设置与用户默认设置是不同的词典,而用户默认设置仅覆盖那些应用程序默认设置。但是我还没有看到删除用户默认值的方法。任何的想法?

Answers:



97

使用此代码

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

如果要立即保存,请不要忘记同步

[[NSUserDefaults standardUserDefaults] synchronize];

NSUserDefaults类参考

同步-此方法会定期自动调用,仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或您想要将用户默认值更新为磁盘上的默认值时,才使用此方法尽管您尚未进行任何更改。

斯威夫特5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()

2
为[[NSUserDefaults standardUserDefaults] synchronize] +1;我通常忘记添加它。
Augustine 2013年

如果您不会同步,则在您关闭应用程序时它将自动同步。
Yucel Bayram 2013年

1
@yucelbayram->是的,但是如果您想立即保存,则必须进行syn。
Rajneesh071

1
@ Rajneesh071是的,是的。
Yucel Bayram 2013年

苹果文档目前对同步方法说:“等待对默认数据库的任何未决异步更新并返回;此方法是不必要的,不应使用。” 您不再需要使用它。
anders32 '18

8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];

8

Swift版本,方便复制粘贴:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

要么

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()

苹果文件状态.synchronize() “是不必要的,不应该被使用。developer.apple.com/documentation/foundation/userdefaults/...
詹姆斯乔丹·泰勒

6

要删除特定的KEY值:

迅捷3+

UserDefaults.standard.removeObject(forKey: "KEY")

对象

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

如果您需要重置UserDefaults /清除所有数据

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

斯威夫特3:

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

4

更新了Swift 3.0代码:

UserDefaults.standard.removeObject(forKey: "YOURKEY")


2
Value of type 'UserDefaults' has no member 'remove'
查理·菲什

1
kbunarjo,你甚至尝试过这个。大声笑。Swift 3 -UserDefaults.standard.removeObject(forKey:“ Key”)
Jeff

1
@Jeff他们最近才发布了Swift 3(3.1)的较新版本。我还没有看过文档,所以我假设这就是为什么我的版本不再起作用的原因。
kbunarjo

Ya,认为这很有趣:)
Jeff

1
UserDefaults.standard.removeObject(forKey:“ YOURKEY”);
马丁·钱伯林

0

在Swift 4中

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()

-1

迅捷的方式

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.