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....
+ (void) resetStandardUserDefaults
doesn't persist the changes, it simply resets the in-memory user defaults object so that the nextsynchronize
call will read from the on-disk copy, instead of overwriting existing in-memory values with the on-disk versions.Iterating over the keys is better, but there's actually a function that does this for you:
removePersistentDomainForName:
.At the end of the
synchronize
operation, both the disk and memory copies of user defaults will contain none of the values set by your application.Shortest way to do this with the same results like in Alex Nichol's top answer:
Swift
Oneliner in Swift:
Swift 3
Swift 4
Does this method not do that:
From the documentation for
NSUserDefaults
:Based on this, you can do:
and now the defaults should be reset.
Swift 3 or 4 We can even simplify described snippet into this modern expression: