ViewController不以编程方式执行segue

时间:2016-12-27 17:37:10

标签: ios objective-c

我遇到了一些我从未见过的东西。方案如下。我的初始VC有一个注册按钮,当点击时会显示几个单独的视图控制器处理注册过程(我要求用户凭据,如果服务器需要,我要求验证码)。完成此过程后,我将自定义对象保存到稍后需要的NSUserDefaults。然后再次显示初始VC。

基本上,我确保我在主线程中并保存自定义对象。如果满足这些条件,我会推送应用程序的主要部分。

这是相关代码,我的所有日​​志都显示在输出窗口中,但不会发生segue。

- (void)viewDidLoad {
   [super viewDidLoad];
   self.complete = false;
   if([NSThread isMainThread]){
       NSLog(@"Main Thread-Yes");
       if ([[NSUserDefaults standardUserDefaults] objectForKey:@"CUSTOMOBJECT"]) {
           NSLog(@"Will begin pushToAuthenticate");
           [self pushAuthenticateController];
       }
   } else {
       NSLog(@"Main Thread-No");
   }
} 

- (void)pushAuthenticateController{
   [self performSegueWithIdentifier:@"pushMainVC" sender:self];
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
   if ([segue.identifier isEqualToString:@"pushMainVC"]) {
       NSLog(@"PrepareForSegue-pushMainVC");
       [segue.destinationViewController.navigationItem setHidesBackButton:YES];
       [segue.destinationViewController.navigationItem setTitle:@"MainVC"];
    }
}

在故事板中我有一个segue连接初始VC和MainVC,该segue的标识符匹配" pushMainVC",如果我关闭并重新打开应用程序(注册后),则会发生segue。两个实例的控制台输出(在注册和关闭以及重新打开应用程序后重新加载初始VC)如下:

APPNAME [4106:1628238]主线索 - 是

APPNAME [4106:1628238]将开始pushToAuthenticate

APPNAME [4106:1628238] PrepareForSegue-pushMainVC

任何想法为什么会发生这种情况,我错过的任何小事或任何帮助都将不胜感激。非常感谢。

2 个答案:

答案 0 :(得分:1)

您正尝试从viewDidLoad执行推送segue。但你不能这样做,因为它太早了; viewDidLoad表示视图存在尚未出现在界面中。你需要等到有一个界面,这样才能有所推动。

答案 1 :(得分:0)

您无法尝试从storayboard本身加载它。 像这样:

    pushMainVC* pushMainV = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([pushMainVC class])];

    [self.navigationController pushViewController:pushMainV animated:YES];

注意: 别忘了给你的viewcontroller故事板ID。