gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:25:09 26 4
gpt4 key购买 nike

非常简单.. 我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com