Objective c 将NSString格式的数据从LoginViewController传递到FirstViewController

Objective c 将NSString格式的数据从LoginViewController传递到FirstViewController,objective-c,ios6,Objective C,Ios6,LoginViewController是我的初始视图控制器。电子邮件地址是LoginViewController中的一个输入,我正在尝试将其发送到FirstViewController。我浏览了这里发布的许多解决方案,但没有找到指向我答案的链接。 请看一下我的代码,告诉我哪里出错了。我在这一点上被困了好几天。我的主要问题是,当我打印emailString以查看它是否被传送到FirstViewController时,它的输出显示为null 仅供参考-我正在使用故事板。我有一个选项卡栏控制器,它有三

LoginViewController是我的初始视图控制器。电子邮件地址是LoginViewController中的一个输入,我正在尝试将其发送到FirstViewController。我浏览了这里发布的许多解决方案,但没有找到指向我答案的链接。 请看一下我的代码,告诉我哪里出错了。我在这一点上被困了好几天。我的主要问题是,当我打印emailString以查看它是否被传送到FirstViewController时,它的输出显示为null

仅供参考-我正在使用故事板。我有一个选项卡栏控制器,它有三个选项卡,FirstViewController是第一个选项卡页面

LoginViewController.h

#import <UIKit/UIKit.h>
#import "FirstViewController.h"

@interface LoginViewController : UIViewController{
    NSString *email;
}

- (IBAction)LoginButton:(id)sender;
- (IBAction)CancelButton:(id)sender;
- (IBAction)dismissKeyboard:(id)sender;

@property (weak, nonatomic) IBOutlet UITextField *EmailField;
@property (weak, nonatomic) IBOutlet UITextField *PasswordField;

@end
#import <UIKit/UIKit.h>
#import "LoginViewController.h"

@interface FirstViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *emailLabel;
@property (nonatomic, retain) NSMutableData *receivedData;
@property (copy) NSString *emailString;
FirstViewController.h

#import <UIKit/UIKit.h>
#import "FirstViewController.h"

@interface LoginViewController : UIViewController{
    NSString *email;
}

- (IBAction)LoginButton:(id)sender;
- (IBAction)CancelButton:(id)sender;
- (IBAction)dismissKeyboard:(id)sender;

@property (weak, nonatomic) IBOutlet UITextField *EmailField;
@property (weak, nonatomic) IBOutlet UITextField *PasswordField;

@end
#import <UIKit/UIKit.h>
#import "LoginViewController.h"

@interface FirstViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *emailLabel;
@property (nonatomic, retain) NSMutableData *receivedData;
@property (copy) NSString *emailString;
我也尝试在LoginViewController中实现prepareFOrSegue方法。但它仍然没有做出任何改变。这是我用它写的代码

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
   if([segue.identifier isEqualToString:@"showDetailSegue"])
    {
        NSString *email = EmailField.text;
        NSLog (@"++++++++++ %@", email);

        FirstViewController *fvc = [segue destinationViewController];
        fvc.emailString=email;
    }   
}
情节提要截图:

如果您使用的是故事板,我强烈建议您使用segues调用不同的视图控制器。这样你可以相对容易地推送vc和传递信息

您可以在登录VC中重写本机方法prepareForSegue,并在那里设置属性。您可以将您的segue id命名为故事板中的任何内容

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      if ([[segue identifier] isEqualToString:@"firstVC"]) {
          FirstViewController *firstVC = [segue destinationViewController];
          firstVC.emailString = EmailField.text;
     }

 }
如果你真的想,我建议你不要使用静态变量 默认值

 [[NSUserDefaults standardUserDefaults]
    setObject:EmailField.text forKey:@"emailString"];
以后再拿回来

      NSString *emailString = [[NSUserDefaults standardUserDefaults]
     stringForKey:@"emailString"];

       NSLog(@"%@",emailString);

我会将电子邮件和密码安全地保存在IOS密钥链中,而不是在视图之间传递

我找到了解决办法

我只需要在prepareForSegue中添加这三行代码,我的程序就可以运行了

    FirstViewController* fvc = [[FirstViewController alloc] init];
    UITabBarController *tbc = [segue destinationViewController];
    fvc = (FirstViewController *) [[tbc customizableViewControllers] objectAtIndex:0];

谢谢大家

你能在黑板上贴一张截图吗?