NSUserDefaultsの管理クラス自動生成してみた

NSUserDeaultsは、アプリのデータを保存しておくためのクラスです。KeyとDataをペアにして扱います。しかし、NSUserDefaultsを直接扱うとKeyの文字列を間違えたり、Dataの型を間違えたりするので、管理クラスを書いています。しかし、アプリごとに毎回管理クラスを書くのは面倒なので、自動生成するプログラムを作りました、rubyで。

コードはこちら

使い方

まず、生成元になるファイルを記述ます。

UDManager.h

NSString *itIsLongName;
NSNumber *number;
NSArray *array;
NSDate *date;
NSInteger i;
double d;

以下の制限があります。
・一行に複数の変数名をかけない
・一行に複数の宣言はできない
・最後の改行は必須

再生元となるファイルのを作成したら、生成をします。

$ ruby UserDefaultsCreator.rb [生成元のファイル] [生成先のディレクトリ]

これで生成されたはずです。ちなみに生成されたファイルのヘッダーを生成元のファイルとして扱うこともできます。
生成された管理クラスの使い方はコードを読めばいいじゃない。

オプション

Option 引数 説明
-s, - shortthatd 速記を使用
-i, - no_init 初期化を挿入しないでください
-h,- help このヘルプを表示して終了
-f,- file_name FILENAME ファイル名を指定します

対応している型

  • NSString *
  • NSNumber *
  • NSArray *
  • NSDictionary *
  • NSData *
  • NSDate *
  • NSInteger
  • double
  • float
  • BOOL

生成例

UDManager.h

#import <Foundation/Foundation.h>

#define kItIsLongName @"itIsLongName"
#define kNumber @"number"
#define kArray @"array"
#define kDict @"dict"
#define kData @"data"
#define kDate @"date"
#define kI @"i"
#define kB @"b"
#define kF @"f"
#define kD @"d"

@interface UDManager : NSObject

+ (instancetype)sharedManager;

- (NSString *)itIsLongName;
- (void)setItIsLongName:(NSString *)itIsLongName;

- (NSNumber *)number;
- (void)setNumber:(NSNumber *)number;

- (NSArray *)array;
- (void)setArray:(NSArray *)array;

- (NSDate *)date;
- (void)setDate:(NSDate *)date;

- (NSInteger)i;
- (void)setI:(NSInteger)i;

- (BOOL)b;
- (void)setB:(BOOL)b;

- (float)f;
- (void)setF:(float)f;

- (double)d;
- (void)setD:(double)d;

@end

UDManager.m

#import "UDManager.h"

@implementation UDManager {
    NSUserDefaults *defaults;
}

+ (instancetype)sharedManager {
    static UDManager *sharedManager_ = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager_ = UDManager.new;
    });

    return sharedManager_;
}

- (id)init {
    self = [super init];
    if (self != nil) {
        defaults = [NSUserDefaults standardUserDefaults];
        [defaults registerDefaults:@{
            kItIsLongName : @"",
            kNumber : @0,
            kArray : @[],
            kDate : [NSDate date],
            kI : @0,
            kB : @0,
            kF : @0,
            kD : @0,
        }];
    }

    return self;
}

- (NSString *)itIsLongName {
    return [defaults objectForKey:kItIsLongName];
}
- (void)setItIsLongName:(NSString *)itIsLongName {
    [defaults setObject:itIsLongName forKey:kItIsLongName];
    [defaults synchronize];
}

- (NSNumber *)number {
    return [defaults objectForKey:kNumber];
}
- (void)setNumber:(NSNumber *)number {
    [defaults setObject:number forKey:kNumber];
    [defaults synchronize];
}

- (NSArray *)array {
    return [defaults objectForKey:kArray];
}
- (void)setArray:(NSArray *)array {
    [defaults setObject:array forKey:kArray];
    [defaults synchronize];
}

- (NSDate *)date {
    return [defaults objectForKey:kDate];
}
- (void)setDate:(NSDate *)date {
    [defaults setObject:date forKey:kDate];
    [defaults synchronize];
}

- (NSInteger)i {
    return [defaults integerForKey:kI];
}
- (void)setI:(NSInteger)i {
    [defaults setInteger:i forKey:kI];
    [defaults synchronize];
}

- (BOOL)b {
    return [defaults boolForKey:kB];
}
- (void)setB:(BOOL)b {
    [defaults setBool:b forKey:kB];
    [defaults synchronize];
}

- (float)f {
    return [defaults floatForKey:kF];
}
- (void)setF:(float)f {
    [defaults setFloat:f forKey:kF];
    [defaults synchronize];
}

- (double)d {
    return [defaults doubleForKey:kD];
}
- (void)setD:(double)d {
    [defaults setDouble:d forKey:kD];
    [defaults synchronize];
}

@end