Je parierais que dans presque tous les cas, il n'y a rien de mal syntaxiquement avec le fichier plist. Les fonctions d'Apple pour le chargement et la sauvegarde des données plist attirent beaucoup l'attention et sont très utilisées. Presque tous les bugs ont sûrement été trouvés et corrigés maintenant.
(Considérez que les plists sont utilisés pour toutes sortes de choses, comme le glisser-déposer et le presse-papiers, les autorisations de bac à sable pour le lancement d'applications, les interfaces utilisateur pour chaque application et même l'icône à afficher dans le Finder. Ce serait incroyable si il y avait un bug dans le code d'écriture de plist qui venait juste de bousiller les fichiers de préférences pour certaines applications, mais pas toutes ces autres choses!)
Le fichier de préférences (plist) d'une application stocke simplement certaines de ses structures de données en mémoire sur le disque. Donc, si l'application a un bogue qui provoque un mauvais réglage, il est enregistré.
Souvent, lorsqu'une application commence à mal se comporter, vous pouvez simplement la quitter et redémarrer. Cela réinitialise de nombreuses parties de celui-ci et peut résoudre le problème. Cependant, les fichiers de préférences sont rechargés à partir du disque, donc si la partie affectée de l'application a été enregistrée dans une préférence persistante, le redémarrage de l'application n'aura aucun impact: la mauvaise valeur sera simplement rechargée. C'est alors que la suppression du fichier de préférences peut aider. C'est comme redémarrer l'application, mais pour les choses qui ont été enregistrées.
Ces choses peuvent se produire car les programmeurs supposent que les données de leur application sont correctes. Si une couleur ne peut être choisie que par l'utilisateur en cliquant sur un contrôle de roue chromatique standard, il ne fait probablement aucun travail supplémentaire pour vérifier qu'elle est correcte avant de l'utiliser. (En comparaison, une application comme Safari fait une tonne de travail supplémentaire pour tout vérifier, car elle charge et exécute des fichiers directement sur Internet.)
L'avantage est que c'est presque toujours correct, et c'est beaucoup plus facile si vous supposez que les valeurs internes sont correctes. L'inconvénient est que si une mauvaise valeur se glisse d'une manière ou d'une autre (comme si l'utilisateur a fait quelque chose de totalement inattendu), les choses peuvent se détraquer jusqu'à ce que tout soit réinitialisé.
-writeToFile:atomically:YES
("les données sont écrites dans un fichier de sauvegarde, puis - en supposant qu'aucune erreur ne se produit - le fichier de sauvegarde est renommé avec le nom spécifié"). Larename()
fonction POSIX garantit que le fichier existera "même si le système devait planter au milieu de l'opération".