Estou usando +[NSUserDefaults standardUserDefaults]
para armazenar as configurações do aplicativo. Isso consiste em aproximadamente uma dúzia de valores de string. É possível excluir esses valores permanentemente, em vez de apenas defini-los com um valor padrão?
ios
objective-c
cocoa-touch
nsuserdefaults
TonyNeallon
fonte
fonte
Respostas:
Você pode remover o domínio persistente do aplicativo como este:
No Swift 3 e posterior:
Isso é semelhante à resposta de @samvermette, mas é um IMO um pouco mais limpo.
fonte
Esse código redefine os padrões para o domínio de registro:
Em outras palavras, é
removeObjectForKey
para todas as chaves que você já registrou nesse aplicativo.Créditos a Ken Thomases neste tópico dos Fóruns de desenvolvedores da Apple .
fonte
[NSUserDefaults resetStandardUserDefaults]
isso não está além de mim.Você tentou usar -
removeObjectForKey
?fonte
Aqui está a resposta no Swift:
fonte
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
one-linerif let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Se você precisar dele durante o desenvolvimento, também poderá redefinir seu simulador, excluindo tudo
NSUserDefaults
.Simulador iOS -> Redefinir conteúdo e configurações ...
Lembre-se de que ele também excluirá todos os aplicativos e arquivos no simulador.
fonte
fonte
Em Swift:
fonte
Nota: Esta resposta também foi atualizada para o Swift.
Que tal tê-lo em uma linha?
Extensão da resposta de Christopher Rogers - a aceita.
e sim, às vezes você pode precisar
synchronize
,Eu criei um método para fazer isso,
Swift ?
Com rápido é ainda mais fácil.
E uso :
fonte
Adoro extensões quando elas tornam o código mais limpo:
Swift 5
fonte
Eu achei isto:
Fonte: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
fonte
Todas as respostas acima são muito relevantes, mas se alguém ainda não conseguir redefinir os padrões do usuário para o aplicativo excluído, você poderá redefinir as configurações de conteúdo do seu simulador e ele funcionará.
fonte
É um bug ou o que seja, mas o
removePersistentDomainForName
não está funcionando enquanto limpa todos osNSUserDefaults
valores.Portanto, a melhor opção é redefinir o
PersistentDomain
que você pode fazer da seguinte maneira:fonte
Expandindo a resposta da @ folse ... acredito que uma implementação mais correta seria ...
... chamando o método persistentDomainForName: do NSUserDefault. Como os documentos afirmam, o método "Retorna um dicionário que contém as chaves e os valores no domínio persistente especificado". Chamar dictionaryRepresentation: em vez disso, retornará um dicionário que provavelmente incluirá outras configurações conforme se aplica a um escopo mais amplo.
Se você precisar filtrar qualquer um dos valores a serem redefinidos, a iteração sobre as chaves é a maneira de fazê-lo. Obviamente, se você quiser apenas refinar todas as preferências do aplicativo sem levar em conta, um dos outros métodos publicados acima é o mais eficiente.
fonte
se a configuração do aplicativo que precisa ser redefinida for nsuserdefault para acesso ao microfone (meu caso), uma solução simples será a resposta de Anthony McCormick ( Iphone - Como habilitar o acesso do aplicativo à mídia no dispositivo? - Código ALAssetsLibraryErrorDomain = -3312 "Acesso negado global" )
no dispositivo, vá para Configurações> Geral> Redefinir> Redefinir avisos de localização
fonte
Tente isso, está funcionando para mim.
Linha de código única
fonte