繁体   English   中英

当我尝试从另一个视图控制器(Objective-c?)访问变量时,为什么变量为null?

[英]Why is my variable null when I am attempting to access it from another view controller (Objective-c?

我正在尝试在第二个视图控制器的另一个UITextField的.text中使用我的第一个视图控制器的UITextField的.text,但是我的第一个视图控制器firstTField.text在我的第二个视图控制器中却变成了(null),即使我在我的第一个视图控制器中打印了_firstTField.text,并打印出了输入的内容。

可能是什么问题? 为什么为空? 有人可以指导我如何解决/解决这个问题吗?

FirstViewController.h

@property (weak, nonatomic) IBOutlet UITextField *firstTField;

SecondViewController.h

@property (weak, nonatomic) IBOutlet UITextField *secondTField;

SecondViewController.m

#import "FirstViewController.h"

- (void)viewDidLoad {
     [super viewDidLoad];
     FirstViewController *firstPage = [[FirstViewController alloc] init];
     _secondTField.text = firstPage.firstTField.text;
}

我会认为FirstViewController塞格斯到SecondViewController 您的代码发生了两件事,这将阻止secondTField设置其文本:

1)您正在实例化FirstViewController实例,而不是引用您从中FirstViewController实例。 此新的FirstViewController将不在视图层次结构中,因此不会设置其文本字段。

2)您将需要在搜索过程中使用NSString在将信息加载到视图层次结构时将其暂时保存在SecondViewController

您的代码将如下所示:

FirstViewController.h

@property (weak, nonatomic) IBOutlet UITextField *firstTField;

SecondViewController.h

@property (weak, nonatomic) IBOutlet UITextField *secondTField;
@property (strong, nonatomic) NSString *secondTFieldText;  // temporary to hold the text from FirstViewController

FirstViewController.m

#import "SecondViewController.h"

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    SecondViewController *secondViewController = (SecondViewController *)segue.destinationViewController;
    secondViewController.secondTFieldText = self.firstTField.text;
}

SecondViewController.m

#import "FirstViewController.h"

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.secondTField.text = self.secondTFieldText;
}

希望对您有所帮助

在加载视图控制器的视图并将其呈现给用户时,将分配标记为IBOutlets的属性。

因此它为null,直到您以某种方式显示视图控制器为止。

在此代码中,您尚未将firstPage的视图添加到任何位置,因此它返回null。

- (void)viewDidLoad {
     [super viewDidLoad];
     FirstViewController *firstPage = [[FirstViewController alloc] init];
     _secondTField.text = firstPage.firstTField.text;
}

您的firstViewController的IBOutlets尚未初始化。 创建一个字符串属性。 设置那个。 然后在firstViewController的viewDidLoad中设置textField的text属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM