トップ «前の日記(2012-01-30) 最新 次の日記(2012-02-01)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|

2012-01-31 [iOS]初期設定NSUserDefaults(その2)

アプリケーションに初期設定情報を持たせる場合、バージョン管理が重要になる。できれば、最初の版からバージョン情報を持たせる事を薦める。

バージョン情報は、新旧の比較を考えると数値型の方が便利だと思うが、バージョンが異なると以前の初期設定を初期化していいのなら、アプリケーションのバージョン番号と同じ内容を文字列として持たせても問題ないと考えている。

@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

_ 関連情報

Data Management Coding How-To's
iOS Developer Libraryの情報です。

トップ «前の日記(2012-01-30) 最新 次の日記(2012-02-01)» 編集