Как автоматически очистить значения NSUserDefault в swift? [дубликат]

этот вопрос уже есть ответ здесь:

Как я могу автоматически очистить nsuserdefault значения в swift? Я уже пробовал это, но это не работает для меня...

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

5 ответов


проверьте, сколько ключей уже хранится

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)

добавить еще один ключ

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")

проверьте, сколько ключей уже хранятся снова (+2)

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)

Теперь создайте цикл, чтобы удалить объект для ключей

for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
    NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}

проверьте, сколько ключей у вас есть снова

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)

обновление: Xcode 7.2.1 * Swift 2.1.1 (Примечание NSUserDefaults больше не работает на игровой площадке, поэтому его нужно протестировать в реальном проект)

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
    NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
}

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

SWIFT аналог для вашего кода objective-c это

 let appDomain = NSBundle.mainBundle().bundleIdentifier!

 NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

Swift 3.0

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)

Решение Swift 3.0

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain) 

defaults.setObject(nil, forKey: "userEmail")

делая это, вы ставите ноль, так что вы ясно


нет "auto clear". Просто получите все существующие ключи NSUserDefaults и установите их все в ноль.

чтобы получить все ключи, получите NSUserDefaults dictionaryRepresentation и keys (allKeys в Objective-C).