Como saber quando o usuário fez para alterar as configurações do bundle
-
14-11-2019 - |
Pergunta
Eu permitir que o usuário faça alterações às configurações na área de configurações do iphone.Durante a próxima rede de sincronização eu gostaria de enviar o usuário muda para o servidor.Mas apenas se as alterações são feitas.
Mas como eu sei quando o usuário tiver feito uma mudança dentro da área de configurações?
Se eu puder, eu gostaria de evitar uma opção de sempre enviar as informações, independentemente se mudou ou não, ou a obtenção de informações a partir do servidor de primeira e de atualização se diferente do padrão de usuário.
Há uma bela e elegante forma de resolver este problema?Obrigado por sua ajuda!
Uma semana mais tarde e sem respostas...Esta pergunta é muito difícil ou não faz qualquer sentido?
Solução
Ah bobo de mim!Aqui vamos nós com uma forma elegante.Procurar AppPrefs na Apple Documentação dentro do XCode, e ela vai mostrar um exemplo de aplicativo que faz exatamente o que você quer fazer.Apenas compilar e executar!Ele faz uso da NSUserDefaultsDidChangeNotification.
Este é o código a ser utilizado para registar um observador:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(defaultsChanged:)
name:NSUserDefaultsDidChangeNotification
object:nil];
Velha resposta:
Isso não parece como se você pudesse ter uma data de modificação fora do NSUserDefaults.Até agora eu só posso pensar desta forma:
NSUserDefaults *previousDefaults = [someInstance previousUserDefaults];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
if([previousDefaults isEqualToDictionary:currentDefaults])
{
[someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults];
[yetAnotherInstance saveModified]
}
Você tem que salvar os padrões do usuário a si mesmo como o dicionário para o disco quando o aplicativo é lançado o primeiro tempo:seus valores padrão.Então, toda vez que o aplicativo é aberto, você comparar os dois dicionários.Se eles
Outras dicas
Não é que a questão seja muito difícil, é só que não há uma maneira simples de fazer o que você está perguntando.NsuserDefaults não registra uma data "última modificada" para as configurações de cada aplicativo, pelo menos até onde posso dizer, por isso, se o usuário alterar algumas configurações usando o aplicativo de configurações, não há uma boa maneira de detectar que além de olharTodas as configurações.
Se você realmente precisar fazer isso, acho que sua melhor aposta é ler as configurações que você está interessado em sincronizar em alguma estrutura de dados e calculando algum tipo de hash ou soma de verificação com base nessa estrutura.Compare esse valor para o valor que você calculou a última vez que o aplicativo funcionou e sincronizar com o servidor, se for diferente.Você pode armazenar esse valor em NsuserDefaults, se quiser, mas certifique-se de não incluí-lo no cálculo.