iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
アプリケーションに初期設定情報を持たせる場合、バージョン管理が重要になる。できれば、最初の版からバージョン情報を持たせる事を薦める。
バージョン情報は、新旧の比較を考えると数値型の方が便利だと思うが、バージョンが異なると以前の初期設定を初期化していいのなら、アプリケーションのバージョン番号と同じ内容を文字列として持たせても問題ないと考えている。
@interface Document : NSObject
@property (strong, nonatomic) NSString *version;
@property (strong, nonatomic) NSString *message;
- (void)clearDefaults;
- (void)updateDefaults;
- (void)loadDefaults;
@end
Documentクラスに、バージョン情報が一致しない場合は初期化するコードを追加する。
@implementation Document
@synthesize version = _version;
@synthesize message = _message;
- (id)init
{
if ((self = [super init]) != nil) {
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
self.version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
NSString *aVersion = @"1.0";
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"version"]) {
aVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
}
if ([aVersion compare:self.version] != NSOrderedSame) {
[self clearDefaults];
}
}
return self;
}
- (void)dealloc
{
self.version = nil;
self.message = nil;
}
- (void)clearDefaults
{
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"message"]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"message"];
}
}
- (void)updateDefaults
{
BOOL fUpdate = NO;
NSString *aVersion = @"";
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"version"]) {
aVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
}
if (self.version) {
if ([aVersion compare:self.version] != NSOrderedSame) {
[[NSUserDefaults standardUserDefaults] setObject:self.version forKey:@"version"];
fUpdate = YES;
}
}
NSString *aMessage = @"";
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"message"]) {
aMessage = [[NSUserDefaults standardUserDefaults] objectForKey:@"message"];
}
if (self.message) {
if ([aMessage compare:self.message] != NSOrderedSame) {
[[NSUserDefaults standardUserDefaults] setObject:self.message forKey:@"message"];
fUpdate = YES;
}
}
if (fUpdate) {
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
- (void)loadDefaults
{
NSString *aVersion = @"";
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"version"]) {
aVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
}
if ([aVersion compare:self.version] != NSOrderedSame) {
[self clearDefaults];
}
else {
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"message"]) {
self.message = [[NSUserDefaults standardUserDefaults] objectForKey:@"message"];
}
}
}
@end