非常简单.. 我有一个 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 我的用户默认值在不同的类中产生两个不同的值......尽管我使用的是标准默认值。
有人遇到过这个吗?