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.
-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"). Arename()
função POSIX garante que o arquivo existirá "mesmo se o sistema travar no meio da operação".