Delete all keys from a NSUserDefaults dictionary iOS

cocoa-touch, ios, nsuserdefaults, objective-c, swift

Solution

If you have a look at the NSUserDefaults documentation you will see a method `- (NSDictionary *) dictionaryRepresentation`. Using this method on the standard user defaults, you can get a list of all keys in the user defaults. You can then use this to clear the user defaults:

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

Problem

I use the NSUserDefaults dictionary to store basic information such as high scores etc so that when the user closes the app data is not lost. Anyways I use: ``` NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; ``` to store data. If I wish to store a new high score for example then I would do: ``` [prefs setInteger:1023 forKey:@"highScore"]; [prefs synchronize]; //this is needed in case the app is closed. ``` and later if I wish to retrieve the high score I would do: ``` [prefs integerForKey:@"highScore"]; ``` anyways the point is that I store a lot of other things because the `NSUserDefaults enable` you to store `booleans`, `integers`, `objects` etc. what method would I have to execute to delete all keys so that NSUserDefaults becomes like the fist time I launch the app? I am looking for something like: ``` NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs deleteAllKeysAndObjectsInTheDictionary]; ``` or maybe there is a way of getting all keys and I have to loop through each object but I don't know how to remove them. EDIT: I have tried : ``` NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [NSUserDefaults resetStandardUserDefaults]; [prefs synchronize]; ``` and I still am able to retrieve a high score....

Original source

Related problems