アプリの起動時に、セグエを使用して LoginViewController をプログラムで表示します。ビュー コントローラーは、クロス ディゾルブに設定されたトランジションでモーダルに表示されます。認証が成功したら、プログラムでアンワインド セグエをトリガーして、ログイン ビューを閉じたいと思います。そこで、これをヘッダーファイルに追加しました:
- (IBAction)unwindSegue:(UIStoryboardSegue *)segue;
IB では、「ファイルの所有者」LoginViewController から [終了] ボタンにコントロールドラッグして、unwindSegue:
. これにより、手動のセグエが作成され、ファイルの所有者と終了ボタンの接続インスペクターに正しく表示されます。次に、IB のシーンから新しく作成された Unwind セグエをクリックし、名前を付けます。unwind segue アクションの「go to」ボタンをクリックすると、上記の宣言に移動します。
これまでのところ、GCD ブロックでの認証が成功すると、このアンワインド セグエをトリガーします。
....
dispatch_async(dispatch_get_main_queue(), ^
{
[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self];
[self.spinner removeFromSuperview];
self.spinner = nil;
});
...実行しても何も起こりません。スピナーは正しく削除されますが、アンワインド セグエが実行されている兆候はありません。
unwindSegue:
never getsの実装のブレーク ポイントにヒットします。エラーはスローされません。コンソールには何も書き込まれません。識別子は正しいです。私はトリプルチェックしました(それ以外の場合はとにかく失敗します)。
here、here、およびhereの回答を見ましたが、何も見逃していないようです。
私が気づいたのは、Xcodeがリンクされ
ていないunwindSegue:
と考えていることです:
の前にある小さな空の円からドラッグしunwindSegue:
て終了ボタンにリンクすることができません。
どんな助けでも大歓迎です。