非常に簡単です。私はiPhoneアプリを持っており、過去30日以内に以前にログインしたことがある場合は自動ログインしたいと思います。NSDateをNSUserDefaultsに次のように保存しています(キーチェーンのユーザー名/パス):
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *lastLogin = [NSDictionary dictionaryWithObject:[NSDate date] forKey:@"last_login"];
[currentDefaults setObject:lastLogin forKey:@"login_info"];
[currentDefaults synchronize];
ここで、このlastLoginディクショナリが存在するかどうかを確認する場所が2つあります。
1)サーバーによってスローされたNotLoggedInExceptionsに応答するコードの部分。(注:同期呼び出しは、値を書き込むときにのみ必要であると考えていますが、追加しました。)
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *loginInfo = [currentDefaults dictionaryForKey:@"login_info"];
[currentDefaults synchronize];
NSDate *lastSeen = [loginInfo objectForKey:@"last_login"];
NSLog(@"%@",loginInfo);
2)最初の画面で人々が見る。待ち時間のため、ログインしていない例外を待つのに時間がかかるので、デフォルト値がない場合は単にログインをスローしたいと思います。
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *loginInfo = [currentDefaults dictionaryForKey:@"login_info"];
[currentDefaults synchronize];
何が起こるかというと、アプリが開きます。最初の画面はステップ2を通過し、前のログインエントリが保存されていると見なすため、コードがサーバーレベルに渡されます。サーバーレベル(ステップ1)では、lastLoginディクショナリはnullになります。別名、私のユーザーデフォルトは、異なるクラスで2つの異なる値を生成しています...標準のデフォルトを使用しているにもかかわらずです。
誰かが前にこれに遭遇しましたか?