2016-08-18 3 views
2

Angenommen, ich verwende keine Storyboards. In allen Beispielen, die ich sah window Eigenschaft in Anwendung Delegat initialisiert in willFinishLaunchingWithOptions oder didFinishLaunchingWithOptions. Warum nicht beim Objektinitialisierungsschritt? Ich habe versucht, dies zu tun und alles scheint gut zu funktionieren.Implementieren der Fenstereigenschaft des UIApplicationDelegate-Protokolls

Upd: um klarer zu sein. Enthält dieser Code versteckte Probleme?

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

Dies ist ein Apple-Muster von iOS Projektvorlage. Natürlich können Sie das Schlüsselfenster außerhalb von 'AppDelegate' init & setzen. Und KUDOs, SB nicht zu benutzen;) –

Antwort

1

Ich habe Experiment und Forschung basierend auf dieser Frage.

Zunächst lassen Sie uns bei Apple Docs Fenster Eigenschaft auf UIApplicationDelegate aussehen:

Die Umsetzung dieser Eigenschaft ist erforderlich, wenn Sie Ihre App-Info.plist Datei den Schlüssel UIMainStoryboardFile enthält. Glücklicherweise enthalten die Xcode-Projektvorlagen normalerweise eine synthetisierte Deklaration der Eigenschaft für den App-Delegaten. Der Standardwert dieser synthetisierten Eigenschaft ist nil. Dadurch erstellt die App ein generisches UIWindow-Objekt und weist es der Eigenschaft zu. Wenn Sie ein benutzerdefiniertes Fenster für Ihre App bereitstellen möchten, müssen Sie die Getter-Methode dieser Eigenschaft implementieren und sie zum Erstellen und Zurückgeben Ihres benutzerdefinierten Fensters verwenden.

Wenn Ihr Code die Option UIMainStoryboardFile in Info.plist nicht verwendet, müssen Sie das Fenster selbst einrichten. Und mein Experiment zeigt, dass die Fenstereigenschaft von UIApplication überhaupt nicht aufgerufen wird. Getter wird nur in willFinishLaunchingWithOptions Methode aufgerufen. Soweit ich sehen kann, gibt es bei diesem Ansatz keine versteckten Probleme.

Wenn Sie die Option UIMainStoryboardFile verwenden möchten, können Sie die Erstellung des Fensters der UIApplication überlassen. Auf der App UIApplication prüft Startvorgang Info.plist für UIMainStoryboardFile Schlüssel, und wenn es Storyboard zur Verfügung gestellt wird, wird es AppDelegate für Fenster fragen:

  • Wenn Fenster null ist, erzeugt UIApplication ein, ordnet rootViewController es und legen Sie es in AppDelegieren.
  • Wenn Fenster nicht gleich Null ist, weist UIApplication rootViewController es
Verwandte Themen