一个简单的NSUserDefaults包装器,可实现可选的iCloud同步。
您可以使用CCLDefaults或将其子类化,以便为您的应用程序提供使用方法。
@implementation CCLExampleDefaults : CCLDefaults
- (NSDictionary *)defaultsDictionary {
return @{
@"name": @"Kyle Fuller",
@"featureXEnabled": @NO,
};
}
- (void)setName:(NSString *)name {
[self setObject:name forKey:@"name"];
}
- (NSString *)name {
return [self objectForKey:@"name"];
}
- (BOOL)hasFeatureXEnabled {
return [[self objectForKey:@"featureXEnabled"] boolValue];
}
- (void)setFeatureXEnabled:(BOOL)featureXEnabled {
[self setObject:@(featureXEnabled) forKey:@"featureXEnabled"];
}
@end
现在,您可以获取一个实例并使用创建的getter和setter
CCLExampleDefaults *defaults = [[CCLExampleDefaults alloc] init];
[defaults setName:@"Kyle"];
如果您希望键有初始值,则可以创建一个名为CCLDefaults.plist
的plist文件,或覆盖defaultsDictionary
。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Kyle</string>
<key>featureXEnabled</key>
</false>
</dict>
</plist>
- (NSDictionary *)defaultsDictionary {
return @{
@"name": @"Kyle Fuller",
@"featureXEnabled": @NO,
};
}
CCLDefaults已实现KVO,因此您可以简单地观察值更改时的通知。
当用户升级应用程序时,CCLDefaults提供回调,您可以对所需的用户默认设置进行任何维护。
版本只是您的版本号(CFBundleVersion)。
- (void)upgradeFromVersion:(NSUInteger)existingVersion toVersion:(NSUInteger)newVersion {
// In version 32, we renamed a key
if (existingVersion < 32 && newVersion >= 32) {
id renamedObject = [self objectForKey:@"renamedKey"];
if (renamedObject) {
[self setObject:renamedObject forKey:@"newKey"];
}
}
}
CocoaPods是将CCLDefaults添加到项目的推荐方法。
以下是一个安装CCLDefaults的示例podfile。
platform :ios, '5.0'
pod 'CCLDefaults'
CCLDefaults在BSD许可证下发布。请参阅LICENSE。