65

ストーリーボードを使用して Xcode 4.6 で新しいシングル ビュー アプリケーションを作成すると、メイン関数が次のようにアプリケーション デリゲートを使用して新しいアプリケーションを作成することがわかります。

return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));

しかし、MyAppDelegate.h と MyAppDelegate.m を見ると、MainStoryboard.storyboard を参照するコードのどこにもありません。これは、nib ファイルをプログラムでロードするコード行を見つけることができるストーリーボードのないバージョンとは異なります。

私の質問は、ストーリーボードはどのようにロードされるのですか? (どこを探せばいいの?)

4

7 に答える 7

75

プロジェクトのターゲット設定を見てください

ここに画像の説明を入力

メイン ストーリーボードの設定に注意してください。

自分でコードでこれを行いたい場合は、次のようにします。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
   UIViewController *vc = [storyboard instantiateInitialViewController];

   // Set root view controller and make windows visible
   self.window.rootViewController = vc;
   [self.window makeKeyAndVisible];

   return YES;
}
于 2013-05-22T22:37:38.790 に答える
9

UIApplicationMainの議論 を見てください。

説明
この関数は、プリンシパル クラスからアプリケーション オブジェクトをインスタンス化し、指定されたクラスからデリゲート (存在する場合) をインスタンス化し、アプリケーションのデリゲートを設定します。また、アプリケーションの実行ループを含むメイン イベント ループを設定し、イベントの処理を開始します。アプリケーションの Info.plist ファイルがロードするメインの nib ファイルを指定している場合、NSMainNibFile キーと値に有効な nib ファイル名を含めることにより、この関数はその nib ファイルをロードします。

UIApplicationMainが呼び出されると、すべてのアプリケーション情報を含む plist ファイルが読み込まれます。

ここに画像の説明を入力

これが、xib/storyboard ファイルをロードする必要があることを「理解」する方法です。

于 2013-05-22T22:39:29.600 に答える
7

info.plist ファイルの UIMainStoryboardFile 設定から開始されます。次に、Xcode はメイン ウィンドウを作成し、最初のビュー コントローラーをインスタンス化して、ウィンドウに追加します。.nib に似たコードでこれを行うことができます。

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController* initialView = [storyboard instantiateInitialViewController];
于 2013-05-22T22:37:18.950 に答える
3

Xcode 11.3.1 では、メイン ストーリーボード ファイルのベース名を変更するだけでは不十分です。アプリケーション シーン マニフェストにもストーリーボード名の構成があり、これも変更する必要があります。

    <key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <false/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                    <key>UISceneStoryboardFile</key>
                    <string>Home</string>
                </dict>
            </array>
        </dict>
    </dict>
于 2020-02-10T05:20:20.417 に答える
0

パーティーには少し遅れましたが、以下に示すように、ウィンドウから viewController にアクセスできます。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        var viewController = window?.rootViewController as? ViewController
        if let viewController = viewController {
            // do awesome stuff
        }

        return true
    }
}
于 2015-07-03T08:09:27.687 に答える