2016-04-26 98 views
1

应该有一个包含全名,用户名,密码,电子邮件和注册按钮的注册页面。 当我们点击注册按钮时,我们然后进入登录页面,在那里它使用NSUserDefaults验证我们在注册页面中创建的用户名和密码。 现在,如果我们给予正确的凭据,那么它应该重定向到注销页面,当我们下次打开应用程序时,它应该直接重定向到注销页面。 数据应该使用NSUserDefaults本地存储(值应该以字符串格式存储)。在iOS中使用Xcode注册登录注销应用程序(NSUserDefaults)

登录视图控制器的.h

#import <UIKit/UIKit.h> 

@interface ViewController2 : UIViewController 
@property(strong, nonatomic)NSString *dataString; 
@property(strong, nonatomic)NSString *dataString2; 

@property (strong, nonatomic) IBOutlet UILabel *lblOutput; 
@property (strong, nonatomic) IBOutlet UITextField *inputTxt1; 
@property (strong, nonatomic) IBOutlet UITextField *inputTxt2; 
- (IBAction)btnAction:(id)sender; 

@end                  

登录视图控制器的.m

#import "ViewController2.h" 

@interface ViewController2() 

@end 

@implementation ViewController2 

- (void)viewDidLoad { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSString *firstName = [defaults objectForKey:@"firstName"]; 
    NSString *lastName = [defaults objectForKey:@"lastname"]; 

    firstName = _inputTxt1.text; 
    lastName = _inputTxt2.text; 

    [super viewDidLoad]; 
    NSLog(@"%@",self.dataString); 
    NSLog(@"%@",self.dataString2); 

    self.navigationItem.title = @"Login Page"; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


- (IBAction)btnAction:(id)sender { 
    NSString *firstName = [_inputTxt1 text]; 
    NSString *lastName = [_inputTxt2 text]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setObject:firstName forKey:@"firstName"]; 
    [defaults setObject:lastName forKey:@"lastname"]; 
    [defaults synchronize]; 


// [Defaults setObject:@"Eezy"forKey:@"iOS"]; 
    NSLog(@"%@",[defaults stringForKey:@"firstName"]); 
    NSLog(@"%@",[defaults stringForKey:@"lastName"]); 
    if ([self.dataString isEqualToString:[defaults objectForKey:@"firstName"]] && [self.dataString2 isEqualToString:[defaults objectForKey:@"lastName"]]) 
    { 

     NSLog(@"goog"); 
     [self performSegueWithIdentifier:@"segueToNextPage2" sender:self]; 
    } 
    else 
    { 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hey Listen" message:@"Wrong User Name or Password" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 

     [alert show]; 
    } 
} 

@end  

的问题是,我已经通过了从注册页面的价值,但是当我将它存储在NSUserDefault那么它存储的是用户名的值,但是在密码的情况下它显示的是空值。

+1

http://stackoverflow.com/help/how-to-ask – Shubhank

+1

看起来更像是一个任务而不是问题。你有没有在任何特定领域尝试过任何东西或遇到问题? – UditS

+0

//问题是已经传递了来自注册页面的值,但是当我将它存储在NSUserDefault中时,它存储了用户名的值,但是在密码的情况下它显示错误。 –

回答

1

这里是我得到了解决方案: -

步骤1:在登录页面定义布尔变量,并设置其为真值上点击登录按钮

- (IBAction)btnAction:(id)sender { 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[prefs setBool:YES forKey:@"registered"]; 
    [prefs synchronize]; 
} 

步骤2。在身份检查器中创建一个名为“UITabBarController”的故事板。请记住,这将是您想要去的页面。

步骤3.在AppDelegate.h文件略低于@implemention写下面的代码: -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"registered"]) { 

     UITabBarController *controller = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"UITabBarController"]; 
     self.window.rootViewController = controller; 
    } 
    return YES; 
} 

这是它非常简单。

2

保存登录值可以使用

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

// saving an NSString 
[prefs setObject:txtUsername.text forKey:@"userName"]; 
[prefs setObject:txtPassword.text forKey:@"password"]; 

[prefs synchronize]; 

用于检索值

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

// getting an NSString 
NSString *savedUsername = [prefs stringForKey:@"userName"]; 
NSString *savedPassword = [prefs stringForKey:@"password"]; 

对于注销:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"Your Key"]; 
+0

但是,如何创建一个注销方法,以便下一次我没有再次登录。 –

+0

查看我的更新回答 –

0

保存在NSUserDefaults从注册页面的详细信息。也可以在NSUserDefaults中输入以检查用户是否登录。

[[NSUserDefaults standardUserDefaults]setValue:@"YES" forKey:@"isLoggedIn"]; 

在AppDelegate中的didFinishLaunching方法,例如基于initialViewController改变isLoggedIn键值

if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"isLoggedIn"] isEqualToString:@"YES"]) 
    { 
     // redirect to logout screen 
    } 
    else 
    { 
     //show login or register screen 
    } 
+0

请您详细说明 –

+0

@shubhammishra有什么复杂的吗? –