Apuesto a que en casi todos los casos, no hay nada sintácticamente incorrecto con el archivo plist. Las funciones de Apple para cargar y guardar datos de plist reciben mucha atención y mucho uso. Casi todos los errores seguramente se han encontrado y corregido por ahora.
(Tenga en cuenta que las listas se utilizan para todo tipo de cosas, como arrastrar y soltar y el portapapeles, permisos de sandbox para iniciar aplicaciones, las interfaces de usuario para cada aplicación e incluso qué icono mostrar en el Finder. Sería increíble si hubo un error en el código de escritura simple que simplemente estropeó los archivos de preferencias para algunas aplicaciones, ¡pero no ninguna de estas otras cosas!)
El archivo de preferencias de una aplicación (plist) simplemente almacena algunas de sus estructuras de datos en memoria en el disco. Entonces, si la aplicación tiene un error que hace que algo se configure incorrectamente, se guarda.
A menudo, cuando una aplicación comienza a comportarse mal, simplemente puede salir y reiniciar. Eso restablece muchas partes y puede solucionar el problema. Sin embargo, los archivos de preferencias se vuelven a cargar desde el disco, por lo que si la parte afectada de la aplicación se guardó en una preferencia persistente, reiniciar la aplicación no tendrá ningún impacto: el valor incorrecto se volverá a cargar. Eso es cuando eliminar el archivo de preferencias puede ayudar. Es como reiniciar la aplicación, pero para cosas que se guardaron.
Estas cosas pueden suceder porque los programadores suponen que los datos que tiene su aplicación son correctos. Si un usuario puede elegir un color haciendo clic en un control de rueda de color estándar, probablemente no haga ningún trabajo adicional para verificar que sea correcto antes de usarlo. (En comparación, una aplicación como Safari hace un montón de trabajo extra verificando todo, porque carga y ejecuta archivos directamente desde Internet).
Lo bueno es que casi siempre es correcto, y es mucho más fácil si asumes que los valores internos son correctos. La desventaja es que si un valor malo se cuela de alguna manera (como si el usuario hiciera algo totalmente inesperado), las cosas pueden volverse locas hasta que todo se restablezca.
-writeToFile:atomically:YES
("los datos se escriben en un archivo de respaldo y luego, suponiendo que no ocurran errores, el archivo de respaldo se renombra con el nombre especificado"). Larename()
función POSIX garantiza que el archivo existirá "incluso si el sistema se bloquea en el medio de la operación".