3

私のストーリーボードには、ルート ビューを ViewController1 に設定する NavViewController があります。次に、ViewController1 は、識別子「socialSeg」を使用して ViewController2 へのプッシュ セグエを持ちます。ViewController1 には、ビデオカメラをロードするために使用する UIImageView があります。ユーザーがビデオを録画して「使用」を選択した後、次のView Controllerをロードしたいと思います。ViewController1.m には次のものがあります。

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{
    NSLog(@"Performing Segue with ID");
    [self performSegueWithIdentifier:@"socialSeg" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Prepping");
}

両方の NSLog が実行されますが、画面に何も表示されません。ViewController2 が表示されず、エラー メッセージも表示されません。私はこれを正しくやっていますか?

関連する質問: 自分自身 (現在の ViewController) で performSegueWithIdentifier を実行する必要がありますか、それとも self.navigationController で実行する必要がありますか?

編集:投稿を短くするために質問を少し短くしようとしましたが、より多くのコンテキストが必要になる可能性があることに気付きました。

これが私の完全なストーリーボードです。基本的に、「ビデオ ビュー コントローラー」は ViewController1 で、「ソーシャル ビュー コントローラー」は ViewController2 です。「ルート ビュー コントローラー」ボタン (ビデオの録画) をクリックすると、そのセグエは正常に動作するため、省略しました。「Root View Controller」が問題を引き起こす可能性はありますか?

4

1 に答える 1

3

performSegueコードに問題はありません。このセグエを実行すると、ピッカー アニメーションがまだ実行されているようです。performSegue以下のように現在の呼び出しを変更して、 の完了ブロックを呼び出してみてくださいpresentViewController

[imagePickerController presentViewController:YES completion:^() {
    NSLog(@"Performing Segue with ID");
    [self performSegueWithIdentifier:@"socialSeg" sender:self];
}];

必ずimagePickerController、ポップアップ イメージ ピッカー コントローラーの名前に置き換えてください。

理想的な解決策ではありませんが、 performSegue の実行を遅らせて、画像ピッカーのアニメーションが次のように停止したことを確認することもできます。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
   //1.5 is number of seconds its going to wait before executing the block of code
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.5 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
        NSLog(@"Performing Segue with ID");
        [self performSegueWithIdentifier:@"socialSeg" sender:self];
    });
}

注:問題は、別のアニメーションを開始して次のビュー コントローラーをロードしようとすると、(ユーザーが画像またはビデオを選択した後にピッカーを閉じるため) 画像ピッカー ポップアップ アニメーションがまだ進行中であることです。performSegue1 つのアニメーションがまだ終了していないため、performSegueアニメーションは無視され、View Controller は読み込まれません。

関連する質問と回答は次のとおりです。

于 2013-09-19T04:03:57.383 に答える