Я использую +[NSUserDefaults standardUserDefaults]
для хранения настроек приложения. Это состоит примерно из десятка строковых значений. Можно ли удалить эти значения навсегда, вместо того, чтобы просто установить их в значение по умолчанию?
ios
objective-c
cocoa-touch
nsuserdefaults
TonyNeallon
источник
источник
Ответы:
Вы можете удалить постоянный домен приложения следующим образом:
В Swift 3 и позже:
Это похоже на ответ @samvermette, но немного чище IMO.
источник
Этот код сбрасывает настройки по умолчанию для домена регистрации:
Другими словами, это
removeObjectForKey
для каждого ключа, который вы когда-либо регистрировали в этом приложении.Кредиты Кену Томасесу в этой теме на форуме разработчиков Apple .
источник
[NSUserDefaults resetStandardUserDefaults]
не сделать это вне меня.Вы пытались использовать -
removeObjectForKey
?источник
Вот ответ в Swift:
источник
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
один лайнерif let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Если вам это нужно во время разработки, вы также можете сбросить симулятор, удалив все
NSUserDefaults
.Симулятор iOS -> Сбросить содержимое и настройки ...
Имейте в виду, что он также удалит все приложения и файлы на симуляторе.
источник
источник
В Свифте:
источник
Примечание. Этот ответ также был обновлен для Swift.
Как насчет того, чтобы это было на одной линии?
Расширяя ответ @Christopher Rogers - принятый.
и да, иногда тебе это может понадобиться
synchronize
,Я создал метод, чтобы сделать это,
Свифт ?
С быстрым его еще проще.
И использование :
источник
Я люблю расширения, когда они делают код чище:
Swift 5
источник
Я нашел это:
Источник: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
источник
Все вышеприведенные ответы очень актуальны, но если кто-то все еще не может сбросить пользовательские настройки по умолчанию для удаленного приложения, тогда вы можете сбросить настройки контента вашего симулятора, и он будет работать.
источник
Это ошибка или что-то еще, но
removePersistentDomainForName
не работает при очистке всехNSUserDefaults
значений.Итак, лучший вариант - сбросить настройки
PersistentDomain
и сделать это можно следующим образом:источник
Расширяя ответ @ folse ... Я считаю, что более правильная реализация будет ...
... вызов метода NSUserDefault persistentDomainForName:. Как указано в документе, метод «Возвращает словарь, содержащий ключи и значения в указанном постоянном домене». Вызов DictionaryRepresentation: вместо этого будет возвращен словарь, который, вероятно, будет включать другие параметры, поскольку он применяется к более широкой области.
Если вам нужно отфильтровать любое из значений, которые должны быть сброшены, то итерация по ключам - это способ сделать это. Очевидно, что если вы хотите просто обнулить все префы для приложения безотносительно, то один из других методов, опубликованных выше, является наиболее эффективным.
источник
если настройка приложения, требующая сброса, - это nsuserdefault для доступа к микрофону (в моем случае), простым решением является ответ Энтони Маккормика ( Iphone - Как включить доступ приложения к медиафайлам на устройстве? - ALAssetsLibraryErrorDomain Code = -3312 «Глобальный отказ в доступе» ).
на устройстве перейдите в «Настройки»> «Основные»> «Сброс»> «Сбросить предупреждения о местоположении»
источник
Попробуйте это, это работает для меня.
Одна строка кода
источник