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


79

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

Ответы:



97

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

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

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

[[NSUserDefaults standardUserDefaults] synchronize];

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

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

Swift 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()

2
+1 для [[NSUserDefaults standardUserDefaults] синхронизировать]; Обычно я забываю это добавить.
Августин

если вы не будете синхронизировать, он автоматически синхронизирует его, когда вы закроете приложение.
Yucel Bayram

1
@yucelbayram -> да, но если вы хотите сохранить сразу, вам нужно синхронизировать.
Rajneesh071

1
@ Rajneesh071 Да, это правда.
Юджел Байрам

В документации Apple в настоящее время говорится о методе синхронизации: «Ожидает любых ожидающих асинхронных обновлений в базе данных по умолчанию и возвращает; этот метод не нужен и не должен использоваться». Вам больше не нужно это использовать.
anders32

8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];

8

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

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

или же

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()

В документах 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: «ВАШ КЛЮЧ»);
Мартин Чемберлин


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.