首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从NSUserDefaults字典iOS中删除所有键

从NSUserDefaults字典iOS中删除所有键
EN

Stack Overflow用户
提问于 2011-07-23 07:18:34
回答 8查看 63.8K关注 0票数 74

我使用NSUserDefaults字典来存储基本信息,比如高分等,这样当用户关闭应用程序时,数据就不会丢失。不管怎样,我使用的是:

代码语言:javascript
复制
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

来存储数据。例如,如果我希望存储一个新的高分,那么我会这样做:

代码语言:javascript
复制
[prefs setInteger:1023 forKey:@"highScore"];
[prefs synchronize];  //this is needed in case the app is closed. 

稍后,如果我希望检索高分,我会这样做:

代码语言:javascript
复制
[prefs integerForKey:@"highScore"];

无论如何,重点是我存储了很多其他的东西,因为NSUserDefaults enable让你存储booleansintegersobjects等等,我必须执行什么方法来删除所有的键,这样NSUserDefaults就像我第一次启动应用程序一样?

我正在寻找类似这样的东西:

代码语言:javascript
复制
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs deleteAllKeysAndObjectsInTheDictionary];

或者,也许有一种方法可以获得所有的键,我必须遍历每个对象,但我不知道如何删除它们。

编辑:

我试过了:

代码语言:javascript
复制
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[NSUserDefaults resetStandardUserDefaults];
[prefs synchronize];

我还能拿到高分……

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-07-23 07:24:35

如果您查看一下NSUserDefaults documentation,您将看到一个方法- (NSDictionary *) dictionaryRepresentation。对标准用户默认设置使用此方法,可以获得用户默认设置中所有键的列表。然后,您可以使用此命令清除用户默认值:

代码语言:javascript
复制
- (void)resetDefaults {
    NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
    NSDictionary * dict = [defs dictionaryRepresentation];
    for (id key in dict) {
        [defs removeObjectForKey:key];
    }
    [defs synchronize];
}
票数 148
EN

Stack Overflow用户

发布于 2014-07-12 12:07:05

一行:

代码语言:javascript
复制
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:NSBundle.mainBundle.bundleIdentifier];
票数 44
EN

Stack Overflow用户

发布于 2012-05-27 11:51:46

+ (void) resetStandardUserDefaults不会持久化更改,它只是重置内存中的用户默认对象,以便下一次synchronize调用将从磁盘上的副本中读取,而不是用磁盘上的版本覆盖现有的内存中的值。

对键进行迭代会更好,但实际上有一个函数可以为您做到这一点:removePersistentDomainForName:

代码语言:javascript
复制
// you can usually get the domain via [[NSBundle mainBundle] bundleIdentifier]
[[NSUserDefaults standardUserDefaults]
 removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
// or use a string for any other settings domains you use
//[[NSUserDefaults standardUserDefaults]
// removePersistentDomainForName:@"com.mycompany.myappname"];
[[NSUserDefaults standardUserDefaults] synchronize];

synchronize操作结束时,用户默认值的磁盘和内存副本都不包含应用程序设置的任何值。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6797096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档