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.
-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".