2

我试图在两个视图控制器之间移动一个 NSString 并且在搜索了所有复杂的方式之后,我想习惯的最简单和最直接的方式是在接收 VC 中编写一个 initWithName 函数并在发送中调用它风险投资。它确实成功地移动了它,但我希望它在 ViewDidLoad 加载 textViewer 之前执行,以便在按下选项卡按钮后立即显示。这是来自发送 VC 的代码:

- (void)textViewDidEndEditing:(UITextView *)textView
{   
    if ([textView.text isEqualToString: @""]) {
        textView.text = @"*Paste the machine code in question here*";
    }
    SecondViewController *theVCMover = [[SecondViewController alloc] initWithName: textView.text];
    [self.navigationController pushViewController:theVCMover animated:YES]; //Is this really necessary if I'm not going to segue it directly, I'm just waiting for the user to press the next tab
    gotItLabel.text = @"Got it! Ready for action...";
}

这是接收VC的代码:

 - (id)initWithName:(NSString *)theVCMovee {
    self = [super initWithNibName:@"SecondViewController" bundle:nil];
    if (self) {
        rawUserInput = theVCMovee;
        CleanerText.text = rawUserInput;
    }
    return self;
} 
- (void)viewDidLoad {
        [super viewDidLoad];
    CleanerText.text = rawUserInput;
        NSLog(@"Got the other tab's text and it's %@ ", rawUserInput);

}
4

2 回答 2

1

您的代码大部分都很好,但是您会发现,由于您拥有更复杂的视图控制器,因此您不一定要编写自定义初始化程序来完成所有属性设置。请注意,如果是您从 nib 加载的 UI 元素,则在您的 init 方法CleanerText中设置它没有帮助 -在调用之前它不会加载。CleanerText.text-viewDidLoad

rawUserInput但是,如果您为要设置的变量或其他变量声明属性,则不必在 init 中执行所有操作。然后你可以去:

SecondViewController *theVCMover = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
theVCMover.rawUserInput = textView.text;
theVCMover.otherProperty = otherValue;
....

其余代码的工作方式相同。

于 2013-03-25T16:43:03.897 回答
0

在完成执行之前,您不能(可靠地)调用实例上的方法init,因此这种模式是“安全的”并且它应该如何工作。

于 2013-03-25T16:36:02.387 回答