Как автоматически очистить значения NSUserDefault в Swift?

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

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

person B.Saravana Kumar    schedule 08.01.2015    source источник
comment
Итак, если вы используете Swift, почему ваш код написан на Objective-C? Хм?   -  person matt    schedule 08.01.2015


Ответы (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)
person Leo Dabus    schedule 08.01.2015
comment
.array не нужен - person Bryan Chen; 08.01.2015
comment
@LeonardoSavioDabus, это перебор. вы можете просто сделать это в строке, как и target-c. проверить мой ответ - person RameshVel; 02.04.2015

Быстрый аналог вашего кода target-c это

 let appDomain = NSBundle.mainBundle().bundleIdentifier!

 NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

Swift 3.0 и выше

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
person RameshVel    schedule 02.04.2015

Решение Swift 3.0

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain) 
person Sourabh Sharma    schedule 14.10.2016

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

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

person Danielle Cohen    schedule 12.11.2015
comment
это работает, но для этого есть метод removeObjectForKey - person Leo Dabus; 02.01.2016
comment
@LeoDabus, вы правы, но removeObjectForKey не будет работать со всеми, например, замена или удаление UserAgent во время выполнения. - person ZAFAR007; 26.11.2016

Нет "автоматической очистки". Просто получите все существующие ключи NSUserDefaults и установите для них значение nil.

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

person matt    schedule 08.01.2015