2013-03-25 76 views
2

我想两个视图控制器之间以及周围的一切令人费解的方式,我想习惯的最简单,最直接的方式搜索后移至一个NSString是写在接受VC的initWithName函数和调用它发送VC。它确实成功地移动了它,但是我希望它在ViewDidLoad加载textViewer之前执行,以便它在按下Tab键后立即显示。下面是从发送VC代码:在ViewDidLoad之前执行InitWithName可能吗?

- (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代码:你不能(可靠)上的一个实例调用方法直到init执行完毕

- (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); 

} 
+0

视图加载后'viewDidLoad'被调用,该视图第一次加载的东西尝试访问它,就像调用'viewController.view',或有一个父视图控制器布局它的子(或窗口显示其根视图控制器的视图)。所以只要你不尝试自己访问'view'属性,并且屏幕上还没有布局,你应该可以安全地设置你需要的所有参数,然后调用'viewDidLoad'(即'init ...'和'push ...' – Guillaume 2013-03-25 16:52:52

+0

您是否正在使用自动引用计数(ARC),以及如何定义'rawUserInput'(我们可以看到.h?) – NSGod 2013-03-25 16:54:56

+0

是的,使用ARC,在这里你去: “@property(强,非原子)的NSString * rawUserInput;” – 2013-03-25 17:42:55

回答

0

,所以这种模式是“安全的”,它是如何工作的。

1

你的代码大部分是好的,但你会发现,当你有你不一定要编写自定义的初始化做属性设置的每一点更复杂的视图控制器。请注意,如果CleanerText是,你从你的笔尖加载UI元素,它并不能帮助设置CleanerText.text在您的init方法,它不加载,直到-viewDidLoad被调用。

你不必做的一切在初始化,不过,如果你对rawUserInput或者您要设置其他变量声明属性。然后,您可以去:

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

而且你的代码的其余部分的工作原理相同。

+0

好吧,感谢多个移动器位上的提示,但是又一次,如何在用户加载标签后立即将移动的字符串加载到textViewer中?我只需创建一个“加载”按钮,除了我想要学习的东西外因为这对我来说似乎很重要, – 2013-03-25 17:40:15

+0

我也试着直接使用“theVCMover.CleanerText.text = textView.text;”移动字符串,但是再次没有任何东西。这看起来很正常,或者是我的代码有问题吗? – 2013-03-25 17:42:15

+0

此代码很好。如果你没有看到你期望的文字,那么问题就是其他问题。 'CleanerText'是一个连接在'SecondViewController.xib'中的'IBOutlet'? – 2013-03-25 18:41:05

相关问题