[[NSUserDefaults standardUserDefaults] setObject:[UIColor whiteColor] forKey:@"Color"];
このようにsetObject:で保存し、
UIColor* color = [[NSUserDefaults standardUserDefaults] objectForKey:@"Color"];
objectForKey:で読み込むことですね。
勿論この方法で問題が無ければ、簡単ですし一番お勧めできる方法です。
しかし、上記の記録方法を採った場合plistなどに初期値の色を設定できないところが難点です。
ですので初期値としての色をplistに設定でき、かつUIColorとしてシームレスに使うことのできる実装を行ないます。
流れとしては、
1. UIColorのRGB成分をそれぞれFloat型変数に抽出する
2. 3つ(R, G, B)のFloat変数をUserDefaultに保存する
3. UserDefaultから3つの値を読み込み、UIColorを生成する
となります。
それでは1から順に実装していきましょう。
-(void) setColor:(UIColor *)Color
{
[_Color release];
_Color = [Color retain];
// ユーザデフォルトに書き込む
const CGFloat* c = CGColorGetComponents(_Color.CGColor);
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setFloat:c[0] forKey:COLOR_R];
[defaults setFloat:c[1] forKey:COLOR_G];
[defaults setFloat:c[2] forKey:COLOR_B];
[defaults synchronize];
}
例ではUIColor型プロパティのセッターに実装しています。
CGColorGetComponents関数にCGColorを渡すことにより、各要素がCGFloat型の配列で返されます。
配列の引数と値の対応は以下の通りです。
[0]:赤(R)
[1]:緑(G)
[2]:青(B)
[3]:Alpha
各要素をsetFloat:で保存します。
読み込みは次のように実装します。
self.Color = [UIColor colorWithRed:[defaults floatForKey:COLOR_R] green:[defaults floatForKey:COLOR_G] blue:[defaults floatForKey:COLOR_B] alpha:1.0];
最後にplistに3つの値の初期値を設定すれば実装完了となります。
コメントする