8

メイン ストーリーボードに配置したビュー コントローラーがありますが、ビュー コントローラーを初期化してロードしようとすると、アプリがクラッシュします。私が使用している xcode のバージョンでは、適切に発生したエラーが実際にはわかりませんが、sigabrt シグナルが送られていることがわかりました。なぜ機能しないのかわかりません。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SelectDateViewController"];
    [vc setModalPresentationStyle:UIModalPresentationFullScreen];

    [self presentModalViewController:vc animated:YES];

これが私がそれを呼んだ方法です。私が使用したすべての名前は正しいですが、なぜクラッシュするのかまだわかりません。

4

3 に答える 3

6

最後の行にブレークポイントを設定して、vc (およびストーリーボード) が nil でないことを確認します。

viewController 引数が nil の場合、presentModalViewController はクラッシュします。

両方が nil の場合、ストーリーボード名が間違っている可能性があります (可能性は低くなります)。

vc だけが nil の場合、識別子が正しくありません (コードまたはストーリーボードのいずれか)。VC のストーリーボード ID (スクリーンショットの丸で囲んだ部分) が説明と一致していることを確認してください。これにはクラス名を選択しないのが通例です (ストーリーボードに特定のクラスのインスタンスが複数ある可能性があるため)。

ストーリーボード ID は大文字と小文字が区別され、一意である必要があります。View Controllerを選択し、Enterキーを押して編集を終了した後、そのフィールドに名前を入力することを確実に設定する方法を見つけました(フィールドをクリックしないでください)。Xcode 4 から 5 に、またはその逆に変換するときに、ストーリーボードでいくつかの破損が発生していることに気付いたので、plist/xml に飛び込むことも役立つかもしれません。

ストーリーボード ID

編集: これが呼び出されるタイミングも重要 です。 presentModalViewController not workingを参照してください。メッセージを受信するView Controllerがすでに表示されていることを確認してください(つまり、viewDidLoadではなくviewDidAppearで呼び出されます)。

Abdullah が述べたように、非推奨の方法を次のように変更する必要があります。

[self presentViewController:vc animated:YES completion:nil];

この場合、完了ブロックは問題なく nil にすることができますが、vc は nil であってはなりません。

于 2013-09-26T00:59:07.560 に答える
0

Storyboard から初期 ViewController を設定しましたか? はいの場合は、ストーリーボード ID が同じであることを確認してください。ストーリーボードを使用している場合は、viewController を直接表示または閉じることができ、コードを記述する必要はありません。

これがあなたを助けることを願っています:)

于 2013-09-26T04:16:48.020 に答える