Làm thế nào để các tập tin ưu tiên trở nên bị hỏng?


10

Tôi đã đọc một vài bài viết khắc phục sự cố khác nhau và Hỏi & Đáp trong đó thủ phạm là tệp ưu tiên bị hỏng cho một ứng dụng hoặc quy trình. Thông thường, giải pháp là xóa tệp ưu tiên xấu và cho phép tệp ưu tiên mặc định mới được sinh ra khi khởi động lại bất cứ phần mềm nào hoạt động sai.

Làm thế nào để một tập tin ưu tiên bị hỏng? Đây có phải chỉ đơn giản là một lỗi đọc / ghi ở mức độ thấp, hoặc có một lỗi cấp độ cao hơn xảy ra trong một số trường hợp? Nó chỉ là sai định dạng hoặc sai chính tả XML?

Tôi tin rằng plutilcó thể cho bạn biết nếu có lỗi cú pháp với tệp, nhưng một lần nữa, lỗi được giới thiệu như thế nào? Tôi không rõ nguồn thông thường cho các tệp bị hỏng này. Cảm ơn.

Câu trả lời:


6

Nó có thể được gây ra bởi rất nhiều thứ, nhưng tôi tin rằng nguyên nhân phổ biến nhất là nơi tệp được ghi và ứng dụng chấm dứt trước khi viết xong tệp. Điều này có thể được gây ra bởi tổng chi phí hệ thống quá lớn để viết thành công vào thời điểm đó.

Lỗi phần cứng với đĩa cứng hoặc bộ nhớ cũng có thể gây ra lỗi dữ liệu, nhưng tôi sẽ tưởng tượng đây sẽ là những vấn đề nhỏ nhất của bạn vào lúc này.


4
Tôi hoài nghi. Nếu đó là trường hợp, ứng dụng phải được viết rất kém, vì phải mất thêm 2 từ để tránh lỗi rõ ràng này. Mã mẫu của Apple để viết một plist sử dụng phương thức -writeToFile:atomically:YES("dữ liệu được ghi vào tệp sao lưu và sau đó - giả sử không có lỗi xảy ra - tệp sao lưu được đổi tên thành tên được chỉ định"). rename()Chức năng POSIX đảm bảo tệp sẽ tồn tại "ngay cả khi hệ thống bị sập ở giữa hoạt động".
Ken

3

Tôi cá rằng trong hầu hết mọi trường hợp, không có gì sai về mặt cú pháp với tệp plist. Các chức năng của Apple để tải và lưu dữ liệu plist nhận được rất nhiều sự chú ý và sử dụng nhiều. Hầu như mọi lỗi đều đã được tìm thấy và sửa chữa.

(Hãy xem xét rằng các plists được sử dụng cho tất cả các loại, như kéo thả và bảng tạm, quyền truy cập hộp cát để khởi chạy ứng dụng, giao diện người dùng cho mọi ứng dụng và thậm chí là biểu tượng nào sẽ hiển thị trong Finder. có một lỗi trong mã viết lách, tình cờ làm hỏng các tệp ưu tiên cho một số ứng dụng, nhưng không phải bất kỳ thứ gì khác!)

Tệp ưu tiên của ứng dụng (plist) chỉ đơn giản là lưu trữ một số cấu trúc dữ liệu trong bộ nhớ của nó trên đĩa. Vì vậy, nếu ứng dụng có lỗi khiến một cái gì đó được đặt không chính xác, nó sẽ được lưu.

Thông thường khi một ứng dụng bắt đầu hoạt động sai, bạn chỉ cần thoát nó và khởi động lại. Điều đó đặt lại nhiều phần của nó, và có thể khắc phục vấn đề. Tuy nhiên, các tệp ưu tiên được tải lại từ đĩa, do đó, nếu phần bị ảnh hưởng của ứng dụng được lưu trong tùy chọn liên tục, việc khởi động lại ứng dụng sẽ không có tác động: giá trị xấu sẽ chỉ được tải lại. Đó là khi xóa tập tin ưu tiên có thể giúp đỡ. Nó giống như khởi động lại ứng dụng, nhưng đối với những thứ đã được lưu.

Những điều này có thể xảy ra vì các lập trình viên cho rằng dữ liệu mà ứng dụng của họ có là chính xác. Nếu người dùng chỉ có thể chọn màu bằng cách nhấp vào điều khiển bánh xe màu tiêu chuẩn, họ có thể không thực hiện thêm bất kỳ công việc nào để xác minh rằng đó là chính xác trước khi sử dụng. (Trong khi đó, một ứng dụng như Safari hiện một tấn công việc thêm xác minh tất cả mọi thứ, bởi vì nó tải và các tập tin chạy thẳng ra khỏi internet.)

Ưu điểm là hầu như luôn luôn đúng và sẽ dễ dàng hơn nhiều nếu bạn cho rằng các giá trị bên trong là chính xác. Nhược điểm là nếu một giá trị xấu lẻn vào bằng cách nào đó (như người dùng đã làm điều gì đó hoàn toàn bất ngờ), mọi thứ có thể trở nên rắc rối cho đến khi mọi thứ được đặt lại.


Nó thật thú vị. Bạn đang nói rằng vấn đề nói chung là dành riêng cho ứng dụng và có liên quan đến lỗi hoặc giám sát cho phép các giá trị xấu được đặt và không được xác minh trước khi sử dụng sau này, không phải với bất kỳ thao tác đọc / ghi hoặc xử lý chung nào. Nó vẫn gây cho tôi sự kỳ lạ mặc dù một cái gì đó phổ biến (và chính thức) như Dock ( apple.stackexchange.com/questions/33950/ trộm ) sẽ có một vấn đề, mặc dù có lẽ đó là một ngoại lệ và thực sự là lỗi đọc / ghi.
wxs

walker: Nếu ai đó có một trong những tệp Plist Dock bị hỏng này, thật dễ dàng để kiểm tra. Tiền của tôi vẫn còn lỗi trong ứng dụng (System Preferences hoặc Dock), không phải mã plist.
Ken

1

Là một công dân cấp cao bị thách thức về công nghệ, tôi thấy Tệp Ưu tiên iTunes của mình bị hỏng và khiến cho thỏa thuận cấp phép xuất hiện mỗi khi tôi mở iTunes. Thêm vào đó, tất cả các sở thích của tôi đã được thiết lập lại. Tôi tin rằng các câu trả lời trên là chính xác, vì ngay trước khi tôi gặp vấn đề này, tôi đã buộc phải tắt máy tính của mình (sự cố điện trong khu vực) và khởi động lại / khởi động lại một nửa nhiều lần. Các ứng dụng chấm dứt trước khi hướng dẫn / viết hoàn thành. Nhưng cách khắc phục để sinh ra một tệp ưu tiên iTunes mới đã được hiển thị trực tuyến và rất dễ thực hiện. Nó đã khắc phục vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.