首选项文件如何损坏?


10

我读过一些不同的疑难解答文章和问答,其中的罪魁祸首是应用程序或过程的首选项文件损坏。通常,解决方案是删除错误的首选项文件,并在重新启动任何行为异常的软件时生成新的默认首选项文件。

首选项文件如何损坏?这仅仅是一个低级别的读/写错误,还是在某些情况下发生了一个更高级别的错误?它只是格式错误或拼写错误的XML?

我相信plutil可以告诉您该文件是否存在语法错误,但是,错误又是如何引入的呢?我不清楚这些损坏文件的通常来源。谢谢。

Answers:


6

可能是由很多原因引起的,但我认为最常见的原因是文件写入的位置,应用程序在完成文件写入之前就终止了。这可能是由于系统开销过大而导致无法成功写入。

硬盘或内存的硬件错误也可能导致数据错误,但是我想这一次这些将是您最少的问题。


4
我很怀疑 如果真是这样,该应用程序肯定写得很差,因为它实际上需要多花2个字来避免出现此明显的错误。苹果公司用于编写plist的示例代码使用该方法-writeToFile:atomically:YES(“将数据写入备份文件,然后-如果没有发生错误,则将备份文件重命名为指定的名称”)。POSIX rename()函数保证“即使在操作过程中系统崩溃”,文件也将存在。
2012年

3

我敢打赌,在几乎每种情况下,plist文件在语法上都没有错。Apple用于加载和保存plist数据的功能引起了很多关注和大量使用。现在几乎可以确定并修复了每个错误。

(考虑使用pls进行各种操作,例如拖放和剪贴板,启动应用程序的沙箱权限,每个应用程序的用户界面,甚至在Finder中显示哪个图标。如果在plist编写代码中存在一个错误,该错误刚好搞砸了某些应用程序的首选项文件,但没有其他任何东西!)

应用程序的首选项文件(plist)只是将某些内存数据结构存储在磁盘上。因此,如果该应用程序存在导致错误设置的错误,则会将其保存。

通常,当应用开始运行异常时,您只需退出并重新启动即可。这会重设它的许多部分,并可能解决问题。不过,偏好设置文件是从磁盘重新加载的,因此,如果将应用程序的受影响部分保存在持久性首选项中,则重新启动应用程序不会产生任何影响:错误的值将再次加载。那就是删除首选项文件可以提供帮助的时候。就像重新启动应用程序一样,但是要保存一些事情。

这些事情之所以会发生,是因为程序员认为他们的应用程序所拥有的数据是正确的。如果只能通过用户单击标准色轮控件来选择一种颜色,则他们在使用它之前可能不会做任何额外的工作来验证它是否正确。(相比之下,像Safari这样的应用程序需要大量的工作来验证所有内容,因为它可以直接从Internet加载和运行文件。)

好的方面是,它几乎总是正确的,并且如果您假定内部值正确,则容易得多。不利的一面是,如果某个错误的值以某种方式潜行(例如用户做了完全出乎意料的事情),事情就会变得一团糟,直到一切重置。


那很有意思。您说的问题通常是特定于应用程序的,并且与错误或疏忽有关,该错误或疏忽允许设置坏值且在以后使用前不进行验证,而不涉及对plist的任何读/写或常规处理。尽管与Dock(apple.stackexchange.com/questions/33950/…)一样常见(和官方)的东西会出现问题,但这仍然让我感到奇怪,尽管这也许是一个例外,并且实际上是读/写错误。
wxs

沃克:如果有人拥有这些损坏的Dock plist文件之一,则很容易检查。我的钱仍然是应用程序(系统偏好设置或Dock)中的错误,而不是plist代码。
2012年

1

作为一名受技术挑战的高级公民,我发现我的iTunes偏好设置文件已损坏,并导致每次打开iTunes时都出现许可协议。另外,我的所有喜好都必须重设。我相信以上答案是正确的,就在我遇到此问题之前,我被迫对计算机进行强制关机(该区域有电气问题),然后多次重启/半重启。指令/编写完成之前,应用程序已终止。但是生成新iTunes首选项文件的修复程序已在线显示,并且非常容易实现。它解决了问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.