我正在通过构建一个与 PHP/MySQL api 对话的小型应用程序来学习 obj-c 的项目。
每次用户做某事时,都会为该用户设置一个新的 auth-key 并发送给客户端。客户端接收到这个值并且应该将它设置为 NSUserDefaults。这是为了在每次程序启动时都不让用户登录;如果此密钥存在,它将尝试使用此密钥进行身份验证,然后自动登录。
有时这可行……我有两个功能,一个用于接收,一个用于设置。它们看起来像这样:
//GET
-(NSString*)GetValue:(NSString *)Name
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *get = [prefs stringForKey:Name];
if(get)
return get;
else
return FALSE;
}
//SET
-(void)SetValue:(NSString*)Name:(NSString*)Value
{
//Add new...
[[NSUserDefaults standardUserDefaults] setObject:Value forKey:Name];
}
这工作,几乎。
问题是这样的:
1)未设置 auth-key 值(在 NSUserDefaults 中)
2)我尝试登录用户,设置值(如“aaaaaaaaaaaaaaaa”),一切都很好。我重新启动程序,它使用这个存储的值,尝试登录,从 PHP 中得到一个肯定的结果以及一个新的密钥,当答案返回时必须设置它......就像这样......
if(NewKey.length > 0)
{
NSLog(@"TRY SET KEY: %@", NewKey);
[self SetValue:@"auth_key":NewKey];
NSLog(@"TRY GET KEY: %@", [self GetValue:@"auth_key"]);
}
3)上面的NSLog说“TRY SET KEY: bbbbbbbbbbbbbbbb”和“TRY GET KEY: bbbbbbbbbbbbbbbb”。看起来很完美!
4) 好吧,我杀了程序再试一次,现在它应该已经存储了“bbb...”,对吧?错误的!当我现在 NSLogs 这个值时,它仍然是“aaa ...”
5)我再次尝试登录,NSLog 显示“TRY SET KEY:ccc ...”和“TRY GET KEY:ccc ...” - 它说值被存储。但它不是......
6)我杀死程序,重新启动并得到“aaa......”。
7)我杀死程序,在AppDelegate中我手动设置这个值(具有相同的功能)喜欢“xxx”。我运行该程序,它将密钥设置为“xx”之类的东西。我删除了这一行,重新启动程序,“xxx”被正确存储,现在我又回到了#2;我可以进行一次登录,它会正确存储此值,然后我可以进行一次自动登录,但是在该登录时它会停止保存它...
那么,这里有什么问题?我已经尝试[[NSUserDefaults standardUserDefaults] removeObjectForKey:Name];
在 SetValue 中作为第一行,但它没有帮助。
就像它设置了一样,然后无论如何都被遗忘了......我做错了什么?