2016-12-27 14 views
0

私は一度も見たことがないものに遭遇しました。シナリオは次のとおりです。私の最初のVCには登録ボタンがあり、ヒットすると2つの別個のView Controllerが登録手続きを処理します(私はユーザーの資格情報を要求し、必要な場合は確認コードを要求します)。このプロセスが完了すると、後で必要となるカスタムオブジェクトをNSUserDefaultsに保存します。その後、最初のVCが再び表示されます。ViewController 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"]; 
    } 
} 

私はMainVCで最初のVCを接続するセグエを持って、そのセグエの識別子は「pushMainVC」に一致する、と私は閉じてseguesが発生した(入学後)アプリを再度開きます。

APPNAME [4106::1628238]メインスレッド - はい

APPNAME [4106:1628238]を開始します(登録やアプリをいったん閉じてから再び開いた後、最初のVCをリロード)両方のインスタンスのコンソール出力は、次のとおりでありますpushToAuthenticate

APPNAME [4106:1628238] PrepareForSegue-pushMainVC

これが起こる可能性があり、なぜすべてのアイデアは、どんな小さな事は、私が欠けている、または任意のヘルプは大歓迎されます。どうもありがとうございます。

+0

NSUserDefaultはNSObjectのサブクラスのカスタムオブジェクトを保存しません。私は –

+0

を知っています。あなたは 'viewDidLoad'の代わりに' viewWillAppear'を押してみましたか? – 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]; 

NOTICE: いけないあなたのViewControllerストーリーボードIDを与えることを忘れています。

関連する問題