保存用户名&首次登录后密码,不要再问

时间:2013-05-03 10:57:58

标签: iphone objective-c cocoa-touch

我正在开发一个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方法保存登录凭据,但它无效。凭证未保存,应用程序再次要求凭据。

3 个答案:

答案 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

    }
}