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 字典是否存在:

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 字典为空!Aka 我的用户默认值在不同的类中产生两个不同的值......尽管我使用的是标准默认值。

有人遇到过这个吗?

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 );

并且作为您的代码,您设置如下代码来存储当前日期时间:-

将日期存储为 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 回答