Удалить все ключи из словаря NSUserDefaults iOS - PullRequest
60 голосов
/ 23 июля 2011

Я использую словарь NSUserDefaults для хранения базовой информации, такой как рекорды и т. Д., Чтобы при закрытии пользователя приложение не потеряло данные. В любом случае я использую:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

для хранения данных. Например, если я хочу сохранить новый рекорд, я бы сделал:

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

и позже, если бы я хотел получить высокий балл, я бы сделал:

[prefs integerForKey:@"highScore"];

В любом случае дело в том, что я храню много других вещей, потому что NSUserDefaults enable вы должны хранить booleans, integers, objects и т. Д., Какой метод мне нужно будет выполнить, чтобы удалить все ключи, чтобы NSUserDefaults становится как в первый раз, когда я запускаю приложение?

Я ищу что-то вроде:

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

или, может быть, есть способ получить все ключи, и мне приходится перебирать каждый объект, но я не знаю, как их удалить.

EDIT:

Я пробовал:

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

и я все еще могу получить высокий балл ....

Ответы [ 15 ]

2 голосов
/ 06 сентября 2018

Swift
место в вашей логике

if let appDomain = Bundle.main.bundleIdentifier {
       UserDefaults.standard.removePersistentDomain(forName: appDomain)
     }
2 голосов
/ 14 апреля 2017

Свифт

 func resetUserDefaults(){

    let userDefaults = NSUserDefaults.standardUserDefaults()
    let dict = userDefaults.dictionaryRepresentation() as NSDictionary

    for key in dict.allKeys {

            userDefaults.removeObjectForKey(key as! String)
    }

    userDefaults.synchronize()

}
1 голос
/ 22 августа 2017

Swift 3 или 4 Мы можем даже упростить описанный фрагмент в этом современном выражении:

func clearAll() {
    let settingsDictionary = userDefaults.dictionaryRepresentation()
    settingsDictionary.forEach { key, _ in userDefaults.removeObject(forKey: key) }
    userDefaults.synchronize()
}
1 голос
/ 23 июля 2011

Этот метод не делает этого:

+ (void)resetStandardUserDefaults

Из документации для NSUserDefaults:

resetStandardUserDefaults

Синхронизируетсялюбые изменения, внесенные в общий объект пользователя по умолчанию и освобождающие его из памяти.

+ (void)resetStandardUserDefaults

Обсуждение

Последующий вызов standardUserDefaults создаетновый общий пользовательский объект по умолчанию со стандартным списком поиска.

На основании этого вы можете сделать:

[NSUserDefaults resetStandardUserDefaults];
[NSUserDefaults standardUserDefaults];

и теперь значения по умолчанию должны быть сброшены.

0 голосов
/ 27 апреля 2019

Чтобы удалить все значения UserDefault в swift (последний синтаксис)

//remove UserDefaults
  if let identifier = Bundle.main.bundleIdentifier {
      UserDefaults.standard.removePersistentDomain(forName: identifier)
      UserDefaults.standard.synchronize()
  }
...