应用程序将如何记住我的身份我是谁?

时间:2014-12-09 06:42:07

标签: ios objective-c json xcode

我有一个要求。我正在使用应用程序中的登录屏幕。除非用户有意识地注销,否则应用程序甚至不应在用户登录后显示登录屏幕。 我是Objective-C的新手。任何人都可以帮我这样做。

先谢谢。

这是我的登录按钮代码。我不知道该怎么做..

- (IBAction)LoginButton:(id)sender
{
    @try
    {

    email = emailTextField.text;
    password=passwordTextField.text;
    NSLog(@"The email %@ and Password is %@ " , emailTextField.text,passwordTextField.text);

    if ([ emailTextField.text isEqualToString:@""] || [passwordTextField.text isEqualToString:@""] )
    {
        UIAlertView *LoginAlert=[[UIAlertView alloc]initWithTitle:@"Fields Empty" message:@"Please Enter the your creadentials" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [LoginAlert show];

    }
    else
    {

        NSString *urlString =[NSString stringWithFormat:@"{\"Email\":\"%@\",\"Password\":\"%@\"}",emailTextField.text,passwordTextField.text];
        NSLog(@"the post url %@",urlString);

        NSString *post = urlString;

        NSString *url=[NSString stringWithFormat:@"http://"];
        NSLog(@"The whole url %@ ", url);

        NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
        NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:url]];
        [request setHTTPMethod:@"POST"];
        NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"", @""];
        NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
        NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedStringWithOptions:0]];
        NSLog(@"%@",authValue);
        [request setValue:authValue forHTTPHeaderField:@"Authorization"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];
        NSError *error;
        NSHTTPURLResponse *response;
        NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

        id json = [NSJSONSerialization JSONObjectWithData:urlData options:0 error:nil];


        NSLog(@"json  %@ ", json);

        if ([[json valueForKey:@"Status"] isEqualToString:@"Sucess"])
        {
            NSString *LoggedPersonID =[json valueForKey:@"PersonID"];
            NSLog(@"the logged person ID is %@", LoggedPersonID);

            [[NSUserDefaults standardUserDefaults] setObject:LoggedPersonID forKey:@"PersonIDUserDefaults"];
            [[NSUserDefaults standardUserDefaults] synchronize];



            //[self performSegueWithIdentifier:@"LoginSeque" sender:self];

            [self CalculateWeekTwo];

            if (_SecondJsonData != nil)
            {
                [self MyNotificationMethod];
                [self performSegueWithIdentifier:@"LoginSeque" sender:self];

            }
            else
            {
                UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Error in Connection" message:@"Please check your network connectivity" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];

                [alert show];
            }


        }
        else if ([[json valueForKey:@"Status"] isEqualToString:@"Error"] || json == nil)
        {
            UIAlertView *LoginAlert=[[UIAlertView alloc]initWithTitle:@"Login Failed" message:@"Please make sure you have entered the correct details" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [LoginAlert show];
        }

    }

    //[[NSUserDefaults standardUserDefaults] setObject:@"10940" forKey:@"PersonIDUserDefaults"];
              [[NSUserDefaults standardUserDefaults] synchronize];
    //emailTextField.text=9416;

    }
    @catch (NSException *exception)
    {
        NSLog(@"exception %@", exception);

        UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Network Error" message:@"Please try later" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];

    }
    @finally {
        NSLog(@"what do i do here");
    }


    //[self performSegueWithIdentifier:@"LoginSeque" sender:self];
}

3 个答案:

答案 0 :(得分:0)

- (IBAction)LoginButton:(id)sender
    {
        if ([[json valueForKey:@"Status"] isEqualToString:@"Sucess"])
        {
           // Navigate to login view controller
        }
        else
        {
           // Throw error alert
        }
    }

答案 1 :(得分:0)

在我的项目中,我通过使用 NSCoding 实现了这一目标。一旦用户登录,他将保持登录状态,直到他退出并绕过登录屏幕。

为此,我在模型类中使用了两种方法:

- (void) encodeWithCoder : (NSCoder *)encode ;
- (id) initWithCoder : (NSCoder *)decode;


- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:_strDOB forKey:@"dob"];
[encoder encodeObject:_strEmail forKey:@"email"];
[encoder encodeObject:_strSName forKey:@"surname"];
}


- (id)initWithCoder:(NSCoder *)decoder{
if((self = [super init])){
    _strDOB = [decoder decodeObjectForKey:@"dob"];
    _strEmail = [decoder decodeObjectForKey:@"email"];
    _strSName = [decoder decodeObjectForKey:@"surname"];
}
return self;
}

比你的loginView.m:

- (void)saveObject:(Cls *)Obj key:(NSString *)key{
NSData *encodeObject = [NSKeyedArchiver archivedDataWithRootObject:Obj];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:encodeObject forKey:key];
[defaults synchronize];
}


- (Cls *)loadObjectWithKey:(NSString *)key{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [defaults objectForKey:key];
Cls *Obj = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
return Obj;
}

最后在使用

的登录按钮方法中
- (void)saveObject:(Cls *)Obj key:(NSString *)key;

您可以保存登录凭据的方法。

在viewWillAppear方法中,您需要调用

- (Cls *)loadObjectWithKey:(NSString *)key;

使用NSUserDefault加载对象的方法。

这肯定会对我有用。 希望它有所帮助。

答案 2 :(得分:0)

使用NSUserDefault修改你的代码。

                [[NSUserDefaults standardUserDefaults] setObject:LoggedPersonID forKey:@"PersonIDUserDefaults"];//after this line add the below code
            [[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"isLogIn"];//add this line in your given code
            [[NSUserDefaults standardUserDefaults] synchronize];

现在,您可以在应用程序委托中添加以下代码,如果登录是第一个屏幕,或者您在哪里呼叫登录屏幕。

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
if ([[defaults valueForKey:@"isLogIn"]isEqualToString:@"YES"]) {
    //already login
    //also you can access your LoggedPersonID here
}
else{
    //call the login view here

}

您也可以在不添加此isLogIn参数的情况下进行管理。

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
if ([defaults valueForKey:@"PersonIDUserDefaults"]==nil) {
    //call the login view here
}
else{
    //logged in
}