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

73 iphone cocoa-touch uikit

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

fbr*_*eto 133

尝试removeObjectForKey- 这应该使您能够删除首选项.


Raj*_*071 95

使用此代码

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];
Run Code Online (Sandbox Code Playgroud)

如果你想立即保存,别忘了同步

[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

NSUserDefaults类参考

synchronize - 此方法会定期自动调用,仅当您无法等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为磁盘上的内容时,才使用此方法虽然你没有做任何改变.

  • +1 [[NSUserDefaults standardUserDefaults] synchronize]; 我经常忘记添加这个. (2认同)
  • 苹果文档目前关于同步方法的描述是:“等待对默认数据库的任何挂起的异步更新并返回;此方法是不必要的,不应使用。” 你不再需要使用这个了。 (2认同)

Moh*_*hit 8

NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];
Run Code Online (Sandbox Code Playgroud)


Esq*_*uth 8

Swift版本,便于复制粘贴:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()
Run Code Online (Sandbox Code Playgroud)

要么

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)


Lal*_*hna 6

要删除特定的KEY值:

Swift 3+

UserDefaults.standard.removeObject(forKey: "KEY")
Run Code Online (Sandbox Code Playgroud)

OBJ-C

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

如果您需要重置UserDefaults/Clear All数据:

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}
Run Code Online (Sandbox Code Playgroud)