Como os arquivos de preferências ficam corrompidos?

10

Eu li alguns artigos diferentes de solução de problemas e perguntas e respostas, onde o culpado é um arquivo de preferência corrompido para um aplicativo ou processo. Normalmente, a solução é excluir o arquivo de preferências incorretas e permitir que um novo arquivo de preferências padrão seja gerado ao reiniciar qualquer software que esteja se comportando mal.

Como um arquivo de preferências é corrompido? Isso é simplesmente um erro de leitura / gravação de baixo nível ou ocorre um erro de nível superior em alguns casos? É apenas XML malformado ou incorreto?

Acredito que plutilpoderia lhe dizer se há um erro sintático com o arquivo, mas, novamente, como foi introduzido o erro? Não sou claro sobre a fonte usual desses arquivos corrompidos. Obrigado.

wxs
fonte

Respostas:

6

Isso pode ser causado por um grande número de coisas, mas acredito que a causa mais comum é para onde o arquivo está sendo gravado e o aplicativo é encerrado antes de terminar de gravar o arquivo. Isso pode ser causado pela sobrecarga do sistema ser muito grande para uma gravação bem-sucedida no momento.

Erros de hardware no disco rígido ou na memória também podem causar erros de dados, mas eu imagino que esses seriam os menores problemas a essa altura.

AlanJC
fonte
4
Eu sou cético. Se esse for o caso, o aplicativo deve ter sido muito mal escrito, pois são necessárias literalmente duas palavras extras para evitar esse erro óbvio. O código de exemplo da Apple para escrever uma lista usa o método -writeToFile:atomically:YES("os dados são gravados em um arquivo de backup e, em seguida, assumindo que não há erros, o arquivo de backup é renomeado para o nome especificado"). A rename()função POSIX garante que o arquivo existirá "mesmo se o sistema travar no meio da operação".
Ken
3

Eu apostaria que em quase todos os casos, não há nada sintaticamente errado com o arquivo plist. As funções da Apple para carregar e salvar dados importantes recebem muita atenção e muito uso. Quase todo bug já foi encontrado e corrigido até agora.

(Considere que as listas são usadas para todos os tipos de coisas, como arrastar e soltar e área de transferência, permissões de sandbox para iniciar aplicativos, interfaces de usuário para todos os aplicativos e até qual ícone exibir no Finder. Seria incrível se Ocorreu um erro no código de escrita de plist que estragou os arquivos de preferência para alguns aplicativos, mas nenhuma dessas outras coisas!)

O arquivo de preferências de um aplicativo (plist) está simplesmente armazenando algumas de suas estruturas de dados na memória no disco. Portanto, se o aplicativo tiver um bug que faça com que algo seja definido incorretamente, ele será salvo.

Muitas vezes, quando um aplicativo começa a se comportar mal, você pode simplesmente encerrá-lo e reiniciar. Isso redefine muitas partes e pode resolver o problema. No entanto, os arquivos de preferência são recarregados do disco; portanto, se a parte afetada do aplicativo foi salva com uma preferência persistente, a reinicialização do aplicativo não terá impacto: o valor incorreto será carregado novamente. É quando excluir o arquivo de preferências pode ajudar. É como reiniciar o aplicativo, mas para coisas que foram salvas.

Isso pode acontecer porque os programadores assumem que os dados de seu aplicativo estão corretos. Se uma cor puder ser escolhida apenas pelo usuário clicar em um controle de roda de cores padrão, provavelmente não fará nenhum trabalho extra para verificar se está correta antes de usá-la. (Em comparação, um aplicativo como o Safari faz uma tonelada de trabalho extra verificando tudo, porque ele carrega e arquivos funciona em linha reta fora da internet).

A vantagem é que quase sempre está correto, e é muito mais fácil se você assumir que os valores internos estão corretos. A desvantagem é que, se um valor ruim aparecer de alguma forma (como o usuário fez algo totalmente inesperado), as coisas podem dar errado até que tudo seja redefinido.

Ken
fonte
Isso é interessante. Você está dizendo que o problema geralmente é específico do aplicativo e tem a ver com um bug ou supervisão que permite que valores ruins sejam definidos e não verificados antes do uso posterior, não com qualquer leitura / gravação ou manipulação geral do plist. Ainda me parece estranho que algo tão comum (e oficial) quanto o Dock ( apple.stackexchange.com/questions/33950/… ) tenha um problema, embora talvez seja uma exceção e realmente seja um erro de leitura / gravação.
Wxs 31/08/12
walker: Se alguém tiver um desses arquivos corrompidos do Dock, é fácil verificar. Meu dinheiro ainda está com um bug no aplicativo (Preferências do Sistema ou Dock), não no código básico.
Ken
1

Como idoso com problemas de tecnologia, descobri que meu arquivo de preferências do iTunes estava corrompido e causava o surgimento do contrato de licença toda vez que eu abria o iTunes. Além disso, todas as minhas preferências tiveram que ser redefinidas. Acredito que as respostas acima estão corretas, pois pouco antes de ter esse problema, fui forçado a fazer desligamentos forçados do meu computador (problemas elétricos na área) e reiniciar / meio reiniciar várias vezes. Os pedidos foram encerrados antes da conclusão das instruções / gravação. Mas a correção para gerar um novo arquivo de preferências do iTunes foi mostrada on-line e muito fácil de executar. Isso resolveu o problema.

Bob Foss
fonte