Как удалить значение пользователя по умолчанию в NSUserDefaults?

79

Т.е. мое приложение вначале устанавливает некоторые стандартные значения по умолчанию. Затем эти значения могут быть переопределены пользователем. И когда пользователь что-то портит, я хочу вернуть эти настройки обратно к значениям по умолчанию для моего приложения. Насколько я понимаю, значения по умолчанию для приложения - это другой словарь, чем пользовательские значения по умолчанию, а пользовательские значения по умолчанию просто переопределяют эти значения по умолчанию для приложения. Но я не видел способов удаления пользовательских настроек по умолчанию. Есть идеи?


источник

Ответы:

140

Попробуйте removeObjectForKey- это должно дать вам возможность удалить предпочтение.

Fbrereto
источник
97

Используйте этот код

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];

не забудьте синхронизировать, если хотите сразу сохранить

[[NSUserDefaults standardUserDefaults] synchronize];

Описание класса NSUserDefaults

synchronize - этот метод автоматически вызывается через определенные промежутки времени, используйте этот метод только в том случае, если вы не можете дождаться автоматической синхронизации (например, если ваше приложение вот-вот завершится) или если вы хотите обновить пользовательские значения по умолчанию до того, что находится на диске, даже хотя вы не внесли никаких изменений.

Swift 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()
Раджниш071
источник
2
+1 для [[NSUserDefaults standardUserDefaults] синхронизировать]; Обычно я забываю это добавить.
Августин
если вы не будете синхронизировать, он автоматически синхронизирует его, когда вы закроете приложение.
Yucel Bayram
1
@yucelbayram -> да, но если вы хотите сохранить сразу, вам нужно синхронизировать.
Rajneesh071
1
@ Rajneesh071 Да, это правда.
Юджел Байрам
В документации Apple в настоящее время говорится о методе синхронизации: «Ожидает любых ожидающих асинхронных обновлений в базе данных по умолчанию и возвращает; этот метод не нужен и не должен использоваться». Вам больше не нужно это использовать.
anders32
8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];
Mohit
источник
8

Версия Swift для простой вставки копии:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

или же

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()
Esqarrouth
источник
В документах Apple указано, что .synchronize() «не нужно и не следует использовать. Developer.apple.com/documentation/foundation/userdefaults/…
Джеймс Джордан Тейлор,
6

Чтобы удалить определенное значение KEY:

Swift 3+

UserDefaults.standard.removeObject(forKey: "KEY")

Obj-C

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

Если вам нужно сбросить UserDefaults / Clear All datas :

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

Swift 3:

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}
Лал Кришна
источник
4

Обновлено для кода Swift 3.0:

UserDefaults.standard.removeObject(forKey: "YOURKEY")

Кбунарджо
источник
2
Value of type 'UserDefaults' has no member 'remove'
Чарли Фиш
1
kbunarjo, ты хоть пробовал такое. СМЕШНО. Swift 3 -UserDefaults.standard.removeObject (forKey: «Key»)
Джефф
1
@Jeff они недавно выпустили новую версию Swift 3 (3.1). Я еще не смотрел документы, поэтому предполагаю, что моя версия больше не работает по этой причине.
kbunarjo
Я подумал, что это смешно :)
Джефф
1
UserDefaults.standard.removeObject (forKey: «ВАШ КЛЮЧ»);
Мартин Чемберлин
0

В Swift 4

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()
Чатар Вир Сутар
источник
-1

Быстрый путь

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Басир Алам
источник