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

时间:2015-11-18 19:15:17

标签: ios objective-c

我试图在我的第一个视图控制器中使用UITextField的.text,在我的第二个视图控制器中使用UITextField的另一个.text,但我的第一个视图控制器firstTField.text在我的第二个视图控制器中变为(null)即使我在我的第一个视图控制器中打印了_firstTField.text,它也打印出输入的输入。

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

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;
}

3 个答案:

答案 0 :(得分:2)

我将假设FirstViewController偏向SecondViewController。您的代码有两件事会阻止secondTField设置其文本:

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

2)您需要在segue期间使用NSStringSecondViewController加载到视图层次结构中时暂时保留该信息。

您的代码将如下所示:

<强> 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;
}

答案 1 :(得分:0)

我希望这可以帮到你

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

因此,在您以某种方式显示视图控制器之前它为空。

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

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

答案 2 :(得分:0)

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