2016-08-18 5 views
2

ストーリーボードを使用しないものとします。すべての例では、アプリケーション代理人のwindowプロパティがwillFinishLaunchingWithOptionsまたはdidFinishLaunchingWithOptionsに初期化されています。なぜオブジェクト初期化ステップではありませんか?私はこれをやろうとしましたが、すべてうまくいくようです。UIApplicationDelegateプロトコルのウィンドウプロパティの実装

更新:より明確にする。このコードには隠された問題が含まれていますか?

class MyAppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? = UIWindow(frame: UIScreen.mainScreen().bounds) 

    func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 
     window?.rootViewController = UIViewController() //just template to make compile possible 
     window?.makeKeyAndVisible() 
     return true 
    } 
    /* ... */ 
} 
+2

それにrootViewControllerを割り当てます。もちろん、AppDelegateの外側でキーウィンドウを初期化して設定することもできます。 SBを使用しないKUDOs) –

答えて

1

私はこの質問に基づいて実験と研究を行っています。

で最初のはUIApplicationDelegateのウィンドウプロパティにAppleのドキュメントを見てみましょう:あなたのアプリケーションのInfo.plistファイルはUIMainStoryboardFileキーが含まれている場合、このプロパティの

実装が必要です。幸運なことに、Xcodeプロジェクトテンプレートには、通常、アプリケーションデリゲート用のプロパティの合成宣言が自動的に含まれています。この合成されたプロパティのデフォルト値はnilです。これにより、アプリケーションは汎用のUIWindowオブジェクトを作成し、それをプロパティに割り当てます。あなたのアプリケーションにカスタムウィンドウを提供したい場合は、このプロパティのgetterメソッドを実装し、カスタムウィンドウを作成して返す必要があります。

あなたのコードでInfo.plistでUIMainStoryboardFileオプションを使用しない場合は、自分でウィンドウを設定する必要があります。私の実験では、UIApplicationではwindowプロパティが呼び出されないことが示されています。 GetterはwillFinishLaunchingWithOptionsメソッドでのみ呼び出されます。私が見る限り、そのアプローチに隠された問題はありません。

UIMainStoryboardFileオプションを使用する場合は、ウィンドウの作成をUIApplicationのままにすることができます。

  • ウィンドウがnilの場合、のUIApplicationは、1を作成し、それにrootViewControllerを割り当て、それを設定します。UIMainStoryboardFileキーのInfo.plistファイルをチェックし、ストーリーボードがある場合、それはウィンドウのAppDelegateを聞いてきますのUIApplicationアプリの起動プロセスでAppDelegate。
  • ウィンドウがnilでない場合は、のUIApplicationこれはiOSのプロジェクトテンプレートのアップルパターンである
関連する問題