2016-12-27 66 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。