iphone - NSUserDefaults 在两个不同的类中为键返回不同的值

标签 iphone ios nsuserdefaults

非常简单.. 我有一个 iPhone 应用程序,如果他们之前在过去 30 天内登录过,我想自动登录。我像这样将 NSDate 存储在 NSUserDefaults 中(用户名/在钥匙串(keychain)中传递):

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

有人遇到过这个吗?

最佳答案

您无需将 NSDate 存储为字典,您只需将登录时的当前时间数据存储在 NSuserDefoul 中作为 -

设置

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

并且作为标准杆,您设置的代码如下所示,用于存储当前日期时间:-

store date as a NSMutabel dictionary not as a Dictionary like 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";

关于iphone - NSUserDefaults 在两个不同的类中为键返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13317217/

相关文章:

iphone - iOS访问字符串中的字符

ios - 问题在 NSUserDefaults 中存储 "Favourite"按钮状态

iphone - 如何确保应用程序退出时 NSUserDefaults 设置保存到磁盘?

swift - 将 NSCore 和 NSKeyedArchiver 与 SWIFT 结合使用

jquery - UIWebView 不会导致 document.ready 触发

iphone - 有没有人有在 iPhone 上使用库从 Objective C 生成 HTML 的经验?

ios - 处理 iOS 7 native 登录弹出窗口中“取消”的选择

iphone - UIWebView 中的异步 HTTP 请求真的会产生新线程吗?

ios - 跨整个应用程序的 AFNetworking 可达性监听器

objective-c - NSNotification,未注册事件如何处理