Ich würde wetten, dass in fast allen Fällen nichts syntaktisch an der plist-Datei falsch ist. Die Funktionen von Apple zum Laden und Speichern von Plist-Daten finden viel Beachtung und werden häufig verwendet. Fast jeder Fehler wurde inzwischen gefunden und behoben.
(Bedenken Sie, dass Plists für alle Arten von Dingen verwendet werden, wie Drag & Drop und die Zwischenablage, Sandbox-Berechtigungen zum Starten von Apps, die Benutzeroberflächen für jede App und sogar das Symbol, das im Finder angezeigt werden soll. Es wäre unglaublich, wenn Es gab einen Fehler im Plist-Writing-Code, der zufällig die Einstellungsdateien für einige Apps vermasselte, aber keines dieser anderen Dinge!)
In der Einstellungsdatei (plist) einer App werden einfach einige ihrer speicherinternen Datenstrukturen auf der Festplatte gespeichert. Wenn die App also einen Fehler aufweist, der dazu führt, dass etwas falsch eingestellt wird, wird sie gespeichert.
Wenn sich eine App schlecht benimmt, können Sie sie häufig einfach beenden und neu starten. Dadurch werden viele Teile davon zurückgesetzt und das Problem möglicherweise behoben. Einstellungsdateien werden jedoch von der Festplatte neu geladen. Wenn also der betroffene Teil der App in einer dauerhaften Voreinstellung gespeichert wurde, hat ein Neustart der App keine Auswirkungen: Der fehlerhafte Wert wird nur erneut geladen. In diesem Fall kann das Löschen der Voreinstellungsdatei hilfreich sein. Es ist wie ein Neustart der App, aber für Dinge, die gespeichert wurden.
Diese Dinge können passieren, weil Programmierer davon ausgehen, dass die Daten in ihrer App korrekt sind. Wenn eine Farbe nur vom Benutzer ausgewählt werden kann, der auf ein Standard-Farbradsteuerelement klickt, führt er wahrscheinlich keine zusätzlichen Arbeiten durch, um zu überprüfen, ob sie korrekt ist, bevor er sie verwendet. (Im Vergleich dazu eine App wie Safari hat eine Tonne zusätzlicher Arbeit alles zu überprüfen, denn es lädt und laufen Dateien direkt aus dem Internet.)
Der Vorteil ist, dass es fast immer korrekt ist und es viel einfacher ist, wenn Sie davon ausgehen, dass die internen Werte korrekt sind. Der Nachteil ist, dass, wenn sich ein schlechter Wert irgendwie einschleicht (wie der Benutzer etwas völlig Unerwartetes getan hat), die Dinge durcheinander geraten können, bis alles zurückgesetzt ist.
-writeToFile:atomically:YES
("Die Daten werden in eine Sicherungsdatei geschrieben, und dann wird - sofern keine Fehler auftreten - die Sicherungsdatei in den angegebenen Namen umbenannt"). Die POSIX-rename()
Funktion garantiert, dass die Datei "auch dann vorhanden ist, wenn das System mitten im Vorgang abstürzt".