Tôi có một lớp AppDelegate với phương thức +(void)initialize
mà tôi sử dụng để đăng ký một số giá trị mặc định. Dưới đây là đoạn code mà tôi sử dụng:Cách đăng ký mặc định người dùng bằng NSUserDefaults mà không ghi đè giá trị hiện tại?
+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
Tôi cũng tạo Preferences.xib nắm giữ vài hộp kiểm (NSButton
) mà hiển thị trạng thái của sở thích. Chúng được gắn với NSUserDefaultsController
với cùng các khóa (fooKey và barKey trong trường hợp này). Mỗi khi tôi khởi chạy ứng dụng và thay đổi "mặc định", chúng sẽ được khôi phục vào lần khởi chạy ứng dụng tiếp theo.
Có cách nào để đăng ký "mặc định mặc định" mà không ghi đè các giá trị hiện có không? Có lẽ mỗi lần tôi xây dựng và khởi chạy một ứng dụng, tệp tùy chọn của nó đang được tạo lại? Có lẽ tôi nên unbind hộp kiểm tra từ NSUserDefaultsController
và duy trì các giá trị của các phím bản thân mình với một số mã tùy chỉnh trong bộ điều khiển cửa sổ tùy chọn?
Tôi muốn nghe việc triển khai lựa chọn của bạn để duy trì mặc định của người dùng.
Tôi đang sử dụng Mac OS X 10.6.2 và XCode 3.2.1
Hãy chắc chắn rằng các hộp kiểm bên chắc chắn sẽ "chung Defaults tài điều khiển", phím điều khiển "giá trị", mô hình con đường quan trọng "fooKey"/"barKey". Nếu không, mã của bạn sẽ ổn với tôi. – Costique
'@" NO "' không phải là một chữ Boolean; nó là một chuỗi chữ cho chữ "KHÔNG". Bạn nên sử dụng '[NSNumber numberWithBool: NO]'; nếu không, các giá trị trong mặc định của người dùng sẽ không phải là Booleans. –
Không, họ sẽ không, nhưng nếu tôi đọc chúng như là BOOL - họ sẽ làm như vậy. Trích từ cuốn sách "Lập trình Cacao" của Daniel H Steinberg (pragprog.com): Trên thực tế, bạn không cần phải rõ ràng khi bạn đặt BOOL trong từ điển. Bạn có thể chuyển giá trị YES hoặc NO thành chuỗi và vẫn tạo BOOL từ giá trị này khi bạn đọc từ các tùy chọn. – Eimantas