Delete all keys from a NSUserDefaults dictionary iOS

64,310

Solution 1

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];
}

Solution 2

Shortest way to do this with the same results like in Alex Nichol's top answer:

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

Solution 3

One-liner:

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:NSBundle.mainBundle.bundleIdentifier];

Solution 4

Simple Solution

Objective C:

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

Swift 3.0 to Swift 5.0 :

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

Solution 5

Swift version:

if let bid = NSBundle.mainBundle().bundleIdentifier {
    NSUserDefaults.standardUserDefaults().removePersistentDomainForName(bid)
}   
Share:
64,310
Tono Nam
Author by

Tono Nam

Updated on December 21, 2021

Comments

  • Tono Nam
    Tono Nam over 2 years

    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....