Tôi thường tạo một lớp tùy chỉnh để giữ tất cả các tùy chọn ứng dụng của mình. lớp có thể tải bản sao có thể thay đổi trong những userDefaults một lần, khi chương trình bắt đầu, và sau đó xử lý tất cả các gia tăng tiết kiệm trên đường đi:
MyPreferences.h
@interface MyPreferences
{
NSMutableDictionary allPrefs;
}
@property (readonly) NSMutableDictionary * allPrefs;
- (void)load;
- (void)save;
@end
MyPreferences.m
@implementation MyPreferences
@synthesize allPrefs;
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
allPrefs = [[NSMutableDictionary alloc] initWithCapacity:0];
return self;
}
- (void)dealloc
{
[allPrefs release];
[super dealloc];
}
- (void)load
{
// load all mutable copies here
[allPrefs setObject:[[defaults objectForKey:@"foo"] mutableCopy]
forKey:@"foo"];
// ...
}
- (void)save
{
[defaults setObject:allPrefs forKey:@"app_preferences"];
}
@end
Tôi tạo một phiên bản của lớp này trong ủy quyền ứng dụng của mình rồi gọi [myPrefs load]
khi ứng dụng của tôi khởi chạy. Bất kỳ sở thích thay đổi trong khi chương trình đang chạy có thể được sửa đổi thông qua myPrefs
, và sau đó lưu bằng cách gọi [myPrefs save]
như mong muốn:
MyPreferences * myPrefs = [myApplication myPrefs];
[myPrefs setObject:bar forKeyPath:@"allPrefs.foo.bar"];
[myPrefs save];
Là một tiền thưởng thêm, bạn có thể cấu trúc lớp MyPreferences
bất kỳ cách nào bạn thích, mang lại những lợi ích của Lập trình OO cho toàn bộ các tùy chọn. Tôi đã cho thấy cách dễ dàng ở đây, chỉ cần sử dụng một từ điển có thể thay đổi, nhưng bạn có thể làm cho mỗi sở thích thành một thuộc tính, và làm trước/sau xử lý cho các đối tượng phức tạp hơn như NSColor
, ví dụ.
Nguồn
2009-08-14 14:08:17