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

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

[prefs setInteger:1023 forKey:@"highScore"];
[prefs synchronize];  //this is needed in case the app is closed. 

稍后,如果我想找回高分,我会这样做:

[prefs integerForKey:@"highScore"];

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

我在找类似的东西:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs deleteAllKeysAndObjectsInTheDictionary];

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

编辑:

我试过:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[NSUserDefaults resetStandardUserDefaults];
[prefs synchronize];

我还是能拿到高分的……

推荐答案

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

- (void)resetDefaults {
    NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
    NSDictionary * dict = [defs dictionaryRepresentation];
    for (id key in dict) {
        [defs removeObjectForKey:key];
    }
    [defs synchronize];
}

Ios相关问答推荐

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

SWIFT图表轴订购问题

围绕对象旋转和移动相机不起作用Swift SceneKit

Xcode 15中的版本控制发生了什么?

当 .searchable 修饰符处于活动状态时,如何将变量设置为 false?

ionic 4 - 编译 ios - 来自项目Pods的目标GoogleDataTransport中的问题

更改订单时如何保存商品的位置?

Flutter Aging Person 自定义小部件

如何在 SwiftUI 视图中显示协议视图?

在 SwiftUI 中重构提取到子视图的 GeometryReader 代码

如何解码没有名称的 JSON 数组?

PropertyWrapper 不存在的 Codable 属性的默认值

NSOperation 有延迟 - 它是异步的还是同步的?

渲染的海边重定向在物理 iOS 设备上不起作用

SwiftUI 切换语句

DateFormatter 使用 TimeZone 和 Locale 的特定组合返回 nil

async/await、Task 和 [weak self]

有没有办法在 xib 文件中的视图和顶部布局指南之间添加约束?

如何在键盘上方添加工具栏?

将视图控制器从一个情节提要移动或复制到另一个情节提要