将NSUserdefaults信息从一个视图控制器传送到另一个视图控制器

时间:2016-09-08 19:20:49

标签: ios objective-c login

我目前正在开发一个简单的应用程序,一个真正测试我的技能和对xcode和应用程序开发的理解。我还是初学者,所以它主要是学习工具和技能培养。无论哪种方式,我都试图在进入下一个视图控制器屏幕之前实现一个简单的登录/注册,登录和注册屏幕是独立的,信息存储在应用程序中,而不是分组或icloud。

在ViewController1.m中,我调用了ViewController2.h:

#import "ViewController2.h"

这也是在ViewController2.m中为ViewController1.h完成的。

在ViewController1.m中我使用NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standarUserDefaults];

[defaults setObject:_usernameField2.text forKey:@"username"];
[defaults setObject:_passwordField2.text forKey:@"password"];
[defaults setBool:YES forKey@"registered"];

[defaults synchronize];

当运行程序并且我能够注册用户并通过segue命令我能够转到下一个视图控制器:

[self performSegueWithIdentifier:@"loginScreen" sender:self];

理想情况下,当我访问ViewController2屏幕时,我想使用上一个viewcontroller(ViewController1)中的信息。但是,当我尝试使用存储的信息时,程序不会从先前的viewController确认信息。

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

    if (![_usernameField1.text isEqualToString:[defaults objectForKey:@"username"]] && ![_passwordField1.text isEqualToString:[defaults objectForKey:@"password"]])

我已经尝试过其他方法,例如使用NSString,但我相信我要么缺少一些简单的东西,要么我试图实现代码可能会关闭。我的一部分认为这可能是因为我正在运行并编写更高版本的xcode(4.6.3),但这是一个小步舞曲。我做过研究,我尝试了几种方法,只是不确定我缺少什么或者我可能需要添加或改变什么。任何帮助将非常感激。提前谢谢

1 个答案:

答案 0 :(得分:0)

在checkCredintails方法中设置断点或NSLog文本字段的值以及为默认值存储的键的内容。另外,请检查您是否实际保存了_usernameField2和_passwordField2的值。

从NSUserDefaults保存和检索数据的方式看起来很好,因此用户在ViewController1中输入(保存)用户名和密码,然后在ViewController2中再次输入以验证它?您可能不应该使用NSUserDefaults来检查/存储密码,但我想您只是以此为例。