NSUserDefaults在两个不同的类中为key返回不同的值

时间:2012-11-09 22:53:20

标签: iphone ios nsuserdefaults

非常简单..我有一个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我的用户默认值在不同的类中生成两个不同的值...尽管事实上我使用的是标准默认值。

之前有人碰到过吗?

1 个答案:

答案 0 :(得分: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字典,而不是像bellow那样的字典

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