1

非常に簡単です。私は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つの異なる値を生成しています...標準のデフォルトを使用しているにもかかわらずです。

誰かが前にこれに遭遇しましたか?

4

1 に答える 1

1

辞書として保存する必要はありませんNSDate。ログイン時に現在の時刻データをNSuserDefoultに-として保存するだけです。

セットする

 NSDate *myDate = [NSDate date];
    [[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];

得る

 NSDate *myDate2 = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
    NSString *string=[dateFormatter stringFromDate:myDate2];

    NSLog(@"str get velue==%@",string );

そしてパーとしてあなたがCurrunt日時を保存するために以下のコードのように設定したあなたのコード:-

以下のような辞書としてではなく、NSMutabel辞書として日付を保存します

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSMutableDictionary *lastLogin = [NSMutableDictionary dictionaryWithObject:[NSDate date] forKey:@"last_login"];
    [currentDefaults setObject:lastLogin forKey:@"login_info"];
    [currentDefaults synchronize];

    NSUserDefaults *currentDefaults2 = [NSUserDefaults standardUserDefaults];
    NSMutableDictionary *loginInfo2 = [[currentDefaults2 dictionaryForKey:@"login_info"]mutableCopy];
    //while you get NSUserdefoult Nsmutabe Dictionary set code like this line with **mutableCopy**



    NSLog(@"%@",loginInfo2);

出力は

"last_login" = "2012-11-10 06:04:28 +0000";

于 2012-11-10T06:02:52.227 に答える