NSUserDefaultsのメモ

NSObjectの派生クラス、NSUserDefaultsについて、忘れないようにメモを書いておく。

ICE-MAN for iPhoneで、クリアしたステージをアプリを閉じても記憶しておきたいと思い、調べてみると、NSUserDefaultsクラスを使うという事を知る。

色々悩んで失敗して、教えてもらって、何とか実装出来た。

実際にICE-MAN for iPhoneで、どの様に使ったのかというと、

 

初期化

NSArray *array = @[ @NO, // ステージ0
@NO, // ステージ1
@NO, // ステージ2
@NO, // ステージ3
@NO, // ステージ4
@NO, // ステージ5
@NO, // ステージ6
@NO, // ステージ7
@NO, // ステージ8
@NO ]; // ステージ9

NSDictionary *defaultValues = @{@”StageClearCheckArray”:array};
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:defaultValues];

この様に、ステージ情報の配列を作り、それをキーと一緒に辞書としてオブジェクト化する。

そのオブジェクトを、NSUserDefaultsクラスのオブジェクトにセットする。

このコードをAppDelegate.mの- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsの中に記述する事で、起動時に一度だけ実行され、オブジェクトが既に作られていたらスルーする(洒落ではない)。

 

読み出し

NSArray *clearStages = [[NSUserDefaults standardUserDefaults] arrayForKey:@”StageClearCheckArray”];

if([clearStages[0] boolValue]) {
// クリアずみ
} else {
// クリアしてない
}

記録されている情報を読み出す時の使い方は、ICE-MAN for iPhoneの場合、ステージセレクトシーンで読み込む。

登録していたキーで配列を呼び出して使う。

 

書き出し(更新)

NSMutableArray *clearStages = [[[NSUserDefaults standardUserDefaults] arrayForKey:@”StageClearCheckArray”] mutableCopy];
[clearStages replaceObjectAtIndex:_stageNo withObject:@NO];
[[NSUserDefaults standardUserDefaults] setObject:clearStage ForKey:@”StageClearCheckArray”];
[[NSUserDefaults standardUserDefaults] synchronize];

更新は、ステージクリアした時に行う。

ステージ内の金塊を全て取った時が、ステージクリア条件なので、StageNode.mの-(void)backyUpdate:(ControlInput)inputSign内で行っている。

これなら、クリア処理中でアプリを終了してもOKだと思う。

更新した配列をキーと一緒に記録し、シンクロナイズさせる。

 

コメント

タイトルとURLをコピーしました