5

I am using NSUserDefaults lots of time in my app to store some values, but on "refresh button" i want to clear all stored values, Is there any way to clear all NSUserDefaults values?

Ajumal
  • 1,048
  • 11
  • 33
New iOS Dev
  • 1,937
  • 7
  • 33
  • 67

2 Answers2

14

You can remove all stored value using below code see here for more details

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

Or in shortest way

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];

Swift

let defaults = UserDefaults.standard
defaults.dictionaryRepresentation().keys.forEach { (key) in
    defaults.removeObject(forKey: key)
}
Ajumal
  • 1,048
  • 11
  • 33
  • The single-line solution did not work for me. However, the removeUserDefaults() function did the job. – C1pher May 25 '17 at 23:22
5

You can clear your user defaults by using following statements -

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

You can call a selector on the refresh button and keep the above statements in it, as-

- (void) refreshUserDefaults
{
    NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
}
Sanjay Mohnani
  • 5,947
  • 30
  • 46
  • Your second option isn't valid here and makes it seem you have misunderstood the question. This isn't what was being asked they specifically state that the `NSUserDefaults` to be cleared when pressing the reset button, how would pressing the reset button in there app make 2 happen? – Popeye Apr 09 '15 at 11:11
  • No worries at least you saw your mistake – Popeye Apr 09 '15 at 11:15