2014-12-09 3 views
-2

У меня есть требование. Я использую экран входа в приложение. Приложение не должно даже отображать экран входа в систему, как только пользователь выполнил вход, если пользователь не войдет в систему. Я новичок в Objective-C. Может кто-нибудь, пожалуйста, помогите мне сделать это.Как приложение будет помнить меня Кто я нахожусь в ios?

Спасибо заранее.

Это мой Логин Кнопка Code.I не знаю, где это сделать ..

- (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]; 
} 
+0

Спасибо SVMRAJESH .. – iworld

+2

Используйте 'NSUserDefaults' или' Keychain' или 'Database' –

+0

Я использовал его, но он снова собирается в Loginscreen. – iworld

ответ

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 
} 
+0

Это работает Спасибо alot – iworld

+0

Когда я выхожу из приложения, если я снова войду в систему, это будет HomeViewController.It не будет LoginView.In userdefaults всегда «YES» только для хранения. Как это сделать? – iworld

+0

«В userdefault всегда всегда есть« YES ». Как это сделать?» Я не понимаю, что именно вы хотите сказать? – NewStackUser

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

. Я использовал ваш код, который он не придет. Появляется экран экрана. – iworld

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.

Это будет работать, безусловно, это работает для меня. Надеюсь, что это поможет.

+0

Здесь вам нужно закодировать все параметры, которые вы получаете от ответа сервера. – Hiren

+0

Не нужно кодировать. – iworld

Смежные вопросы