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 ]; // ステージ9NSDictionary *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だと思う。
更新した配列をキーと一緒に記録し、シンクロナイズさせる。
コメント