isso pode soar real NOOB! Quero verificar se é a segunda vez que o usuário entra em meu aplicativo, para manter a contagem de execuções que estou usando NSUserDefaults
. Eu tenho implementado o seguinte código no meu rootViewController
's viewDidLoad
método:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);
if ([userDefaults integerForKey:@"runCount"] != 1) {
//not the 2nd run
[userDefaults setInteger:1 forKey:@"runCount"];
NSLog(@"not 2nd run");
} else {
//second run or more
NSLog(@"2nd run");
}
[userDefaults synchronize];
tudo funciona bem, mas o problema é que quando eu desinstalo (apago e reinstala) o aplicativo de acordo com aqui e aqui os dados devem ser apagados, mas não é e depois de reinstalar o aplicativo os dados anteriores ainda aparecem. Estou executando meu aplicativo no simulador iOS usando xCode6-beta e direcionando o aplicativo no iOS 8
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Reza Shayestehpour
fonte
fonte
NSMutableArray
que foi salvo como umNSArray
e alterá-lo fez meu aplicativo travar. .. Eu recomendo salvar umNSArray
e quando quiser usá-lo mais tarde, lançando-o paraNSMutableArray
usar[NSMutableArray arrayWithArray:array];
. Espero que ajude.Respostas:
Acho que isso se deve a um bug no Simulador Beta do iOS8.
O comportamento esperado é que, quando o aplicativo for excluído, os NSUserDefaults desse aplicativo também sejam excluídos.
Uma solução rápida e irritante por enquanto é clicar em Simulador de iOS -> Redefinir conteúdo e configurações.
O Xcode 9.2 com Simulador 10 ainda apresenta esse problema. A opção de menu agora é Hardware .. Apagar todo o conteúdo e configurações
Eu enviei um relatório de bug btw
fonte
Como Redefinir conteúdo e configurações é uma opção nuclear, você pode considerar duas outras opções até que o bug no simulador iOS 8 / Xcode 6 GM seja corrigido:
Você pode excluir manualmente o arquivo plist onde
NSUserDefaults
estão armazenados. Atualmente, ele está localizado em~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
É um pouco tedioso encontrar o simulador certo para trabalhar entre os nomes de diretório UUID. EDIT : 2014-10-28 20-34-52 Caminho correto:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Você pode realizar uma "cirurgia" nesse plist (usando uma fase de construção de script de execução, talvez) usando plistbuddy, por exemplo
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
fonte
Para qualquer pessoa que enfrente o mesmo problema.
Se você tiver mais de 1 aplicativo no mesmo grupo e todos estiverem usando grupos de aplicativos (ON em recursos), você terá que remover todos os aplicativos do dispositivo para que os padrões do usuário sejam apagados.
Uma vez que os padrões do usuário são compartilhados, mesmo se um dos aplicativos estiver no dispositivo, ele não será excluído, pois o aplicativo estará usando os padrões do usuário.
fonte
O código deve funcionar bem no dispositivo. Talvez alguns bugs no simulador.
Tente redefinir o conteúdo e as configurações do simulador.
fonte
é um bug, e você pode excluir NSUserDefaults com o seguinte código
fonte
Embora ainda seja um bug, outra opção poderia ser remover a (s) chave (s) específica (s) em NSUserDefaults. Na maioria das vezes, ao testar / desenvolver, nos preocupamos apenas com algumas chaves e não tudo em NSUserDefaults. Se você se preocupa apenas com algumas chaves, proponho adicionar
removeObjectForKey
:Adicionar
removeObjectForKey
simula a primeira execução do aplicativo, comentar irá simular todas as execuções subsequentes do aplicativo.fonte
No meu caso, encontrei o * .plist no seguinte diretório:
[1] / Users / SOME-USERNAME / Library / Developer / CoreSimulator / Devices / SOME-DEVICE-ID /data/Library/Preferences/SP.UserDefaultsTest.plist
Problema: Excluindo o aplicativo no xCode 6 (simulador iOS 8), mas o arquivo permanece no disco como mencionado acima.
Solução: Excluir o arquivo localizado do caminho [1] manualmente e os NSUserDefaults desaparecerão.
Portanto, a maneira irritante de reiniciar o simulador não é mais necessária.
fonte