1

私は3つのストーリーボードで作業しており、コードのセクションでViewControllerの識別子を取得していますが、どのストーリーボードがそれに属しているかわからないため、instantiateViewControllerWithIdentifierを呼び出すことはできません。

問題は、ViewController 識別子を使用して StoryBoard インスタンス/識別子を取得することは可能ですか?

よろしくお願いします!

4

3 に答える 3

2

instantiateViewControllerWithIdentifier を呼び出すことはできますが、その識別子を持つビュー コントローラーが存在しない場合は nil 値が返されます。

nil 以外の値が見つかるまで、3 つのストーリーボードでこの方法をテストできます。

Apple のドキュメントを参照してください

編集:例外を検出した後(申し訳ありませんが、Appleのドキュメントは時々少し混乱します)、できることは、このようなtry/catchブロックでコードをラップすることです

    @try {
        UIViewController *myViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"myViewControllerID"];
    }
    @catch (NSException *exception) {
        DLog(@"Exception: This is not the storyboard");
    }
    @finally {
        DLog(@"I found it!");
    }
于 2013-05-11T22:59:34.983 に答える
0

私は自分のアプリで同様の問題を何日も調査しました。私の知る限り、ストーリーボードに特定のビューコントローラー ID が含まれているかどうかを確認することはできません。Apple のドキュメントでは、これを事前に知っておく必要があり、id が見つからない場合は、すぐに例外が発生します。

try-catch ブロックの使用に関する提案を見てきました。ただし、それらをいじってみると、非常に薄い氷を踏んでいることがわかりました。テストするストーリーボードが複数ある場合、IMO はすぐに非常に複雑になります。

私が自分のアプリで採用したアプローチの 1 つは、ViewController の名前付けスキームを考え出すことです。これには、基本的にそれが属するストーリーボードの情報が含まれます。たとえば、ストーリーボード 1 のすべてのビューコントローラーは「1-...」で始まります。次に、文字列関数を介してコードでこれを抽出し、その場で正しいストーリーボードをインスタンス化できます。

于 2013-05-12T17:38:01.230 に答える