2016-12-27 62 views
0

我遇到了一些我从未见过的东西。情景如下。我最初的VC有一个注册按钮,当被点击时,会引起一对独立的视图控制器处理注册过程(我要求用户凭据,如果服务器要求,我要求输入验证码)。当这个过程完成后,我将一个自定义对象保存到稍后需要的NSUserDefaults中。然后再次显示初始VC。ViewController没有以编程方式执行segue

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

这里是相关的代码,我的所有日​​志都显示在输出窗口中,但是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"]; 
    } 
} 

在故事板我有初始VC与MainVC连接一SEGUE,对于赛格瑞标识符相匹配“pushMainVC”,如果我关闭并重新打开该应用程序(登记后)塞格斯确实发生。控制台输出为两个实例(登记和关闭并重新打开该应用之后重新加载初始VC)如下:

APPNAME [4106:1628238]主线程是

APPNAME [4106:1628238]将开始pushToAuthenticate

APPNAME [4106:1628238] PrepareForSegue-pushMainVC

任何想法,为什么这可能发生,任何一件小事我的思念,或任何帮助将不胜感激。非常感谢。

+0

NSUserDefault并没有保存NSObject的子类自定义对象,据我所知 –

+0

你试过在'viewWillAppear'而不是'viewDidLoad'中推入segue吗? – dirtydanee

+0

可能重复的[对ViewDidLoad执行Segue](http://stackoverflow.com/questions/8221787/perform-segue-on-viewdidload) – dirtydanee

回答

1

您正在尝试执行从viewDidLoad推推继续。但是你不能那样做,因为它太快了; viewDidLoad意味着视图存在但是尚未在界面中。你需要等待,直到有一个接口,所以你有什么推动。

+0

我可以从viewDidLoad中显示它吗? –

+1

不,现在太快了!目前还没有界面。 – matt

0

你不能尝试从storayboard本身加载它。 这样的:

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

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

注意: 不要忘了给你的ViewController故事板ID。