我正在开发一个ios应用程序,因为我需要输入公司代码和访问代码才能登录。在第一次使用访问代码登录后,我们不能再打开应用程序时再次请求访问代码。我的意思是我需要保存首选项。
我的代码在这里
- (IBAction)loginClicked:(id)sender {
@try {
if([[txtsecurecode text] isEqualToString:@""] || [[OrganizationCode text] isEqualToString:@""] ) {
[self alertStatus:@"Please enter Access code" :@"Login Failed!":0];
} else {
NSString *post =[[NSString alloc] initWithFormat:@"txtsecurecode=%@ @&password=%@",[txtsecurecode text],[OrganizationCode text]];
NSLog(@"PostData: %@",post);
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://mycompany.com/AccountService/security/ValidateAccess?accesscode=%@&companycode=%@&type=1", txtsecurecode.text, OrganizationCode.text]];
[[ NSUserDefaults standardUserDefaults] setValue:OrganizationCode forKey:@"OrganizationCode"];
[[ NSUserDefaults standardUserDefaults] setValue:txtsecurecode forKey:@"txtsecurecode"];
[[NSUserDefaults standardUserDefaults] synchronize];
txtsecurecode = [[NSUserDefaults standardUserDefaults] objectForKey:@"txtsecurecode"];
OrganizationCode = [[NSUserDefaults standardUserDefaults] objectForKey:@"OrganizationCode"];
// NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"txtsecurecode"];
NSString *responseData = [[NSString alloc]initWithData:[NSData dataWithContentsOfURL:url] encoding:NSUTF8StringEncoding];
if([responseData isEqualToString:@""]){
[self alertStatus:@"Please enter valid Access Code" :@"Login Failed !" :0];
}
else
{
responseData = [responseData stringByReplacingOccurrencesOfString:@" "" " withString:@""];
responseData = [responseData stringByReplacingOccurrencesOfString:@"\\" withString:@""];
NSString* encodedString = [responseData stringByReplacingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];
NSLog(@"Response ==> %@" ,encodedString);
UIWebView *webView;
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0, 320, 470)];
webView.backgroundColor = [UIColor clearColor];
webView.opaque = NO;
[webView setDelegate:self];
NSString* urlTwo = [[encodedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
stringByReplacingOccurrencesOfString:@"%22" withString:@""];
NSURL *url2;
if([urlTwo hasPrefix:@"http://"]){
url2 = [NSURL URLWithString:urlTwo];
}else{
url2 = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@" , urlTwo]];
}
NSLog(@"url2:%@", url2);
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url2];
[webView loadRequest:requestObj];
[[self view] addSubview:webView];
}
}
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
[self alertStatus:@"Login Failed." :@"Login Failed!" :0];
}
}
我曾使用NSUserDefaults方法保存登录凭据,但它无效。凭证未保存,应用程序再次要求凭据。
答案 0 :(得分:1)
试试这个
成功登录后,将其保存在NSUserDefaults
中 NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
[status setObject:@"1" forKey:@"Login"];
下次只检查
NSUserDefaults *objUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *strSuccess=[objUserDefaults objectForKey:@"Login"];
if ([strSuccess isEqualToString:@"1"]) {
// just push the next view.
}
else {
// open login screen
}
OR 下一个选项,如果您关心安全性,the keychain。
修改强>
.h文件
NSUserDefaults *objUserDefaults;
@property (nonatomic,retain) NSUserDefaults *objUserDefaults;
.m文件
@synthesize objUserDefaults;
第一次登录时,方法在响应\
上写下此内容 objUserDefaults = [NSUserDefaults standardUserDefaults]
[objUserDefaults setObject:@"1" forKey:@"Login"];
and when you required for login check then
NSString *strSuccess=[objUserDefaults objectForKey:@"Login"];
if ([strSuccess isEqualToString:@"1"]) {
// just push the next view.
}
else {
// open login screen
}
答案 1 :(得分:0)
OrganizationCode
不是字符串,您将其作为字符串获取:
OrganizationCode = [[NSUserDefaults standardUserDefaults] stringForKey:@"OrganizationCode"];
您需要使用objectForKey:
,尝试使用:
OrganizationCode = [[NSUserDefaults standardUserDefaults] objectForKey:@"OrganizationCode"];
另外,OrganizationCode看起来像是一个类的名称,而不是一个对象的实例,你确定你是以正确的方式使用它吗?
答案 2 :(得分:0)
要存储:登录按钮:
-(IBAction)Login:(id)sender
{
if (success) {
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
[status setObject:@"LOGGING" forKey:@"STATUS"];
// GO TO NEXT FUNCTION ??
}
}
获取:验证按钮:
-(void)load_view
{
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
NSString *status_str=[status objectForKey:@"STATUS"];
if ([status_str isEqualToString:@"LOGGING"]) {
// GO TO NEXT SUCCESS FUNCTION
}
else
{
// GO TO Login View
}
}