2016-10-06 3 views
5

Ist das nicht didFinishLaunchingWithOptions soll aufgerufen werden, wenn die App zum ersten Mal zu laufen beginnt? Ich setze einen Haltepunkt bei dieser Methode und wenn ich die App im Simulator starte, wird der Haltepunkt nicht getroffen, was bedeutet, dass die Methode nicht aufgerufen wird. Ich versuche, einige Daten von UserDefaults zu laden, wenn die App startet, aber es wird vollständig ignoriert. Eine Sache, die ich bemerkte, ist, dass es standardmäßig ein private func anstelle von func ist. Wenn ich die private los werde, erhalte ich eine Warnung, dass "es eine fast ähnliche optionale Anforderung im UIApplicationDelegate gibt". Kann mir jemand erklären, was das bedeutet und ob die private func etwas damit zu tun hat, dass die Methode ignoriert wird? Soll diese Methode überhaupt aufgerufen werden, wenn ich meine App im Simulator laufe? Wenn nicht, wie kann ich testen, ob Daten nach dem Start meiner App abgerufen werden? Alle anderen Methoden in der AppDelegate werden normal aufgerufen (zum Beispiel funktioniert die applicationDidEnterBackground Methode einwandfrei).Private Funktion didFinishLaunchingWithOptions wird nicht aufgerufen? (Swift 3)

Antwort

14

Ihre Methodensignatur entfernen und Xcode automatisch vervollständigt hat es

Ich hatte auch das Problem, dass meine didFinishLaunchingWithOptions Methode in AppDelegate nicht aufgerufen werden. Meine Funktion wurde auch privat markiert und sah so aus

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

Das Problem ist, dass dies die alte Syntax ist! Offensichtlich hat Xcode, als ich mein Projekt von Swift 2.x auf Swift 3 umstellte, die Methoden in AppDelegate nicht konvertiert. Die neue Syntax sieht wie folgt aus

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool 
+0

Sorry, ich habe dieses Problem vor einiger Zeit behoben. Haben Sie vergessen, diese Frage als beantwortet zu markieren. Um dieses Problem zu beheben, musste ich "AnyObject" durch "Any" als Wert des Dictionary-Parameters dieser Methode ersetzen. Es ist wirklich komisch, dass man 'AnyObject' in Swift 3 immer noch aufrufen kann, obwohl diese Klasse in' Any' umbenannt wurde und vollständig veraltet ist. Aber es gibt auch ein paar andere Beispiele für diese Art von Klassen, 'AnyObject' ist nicht die einzige. –

+0

Genau das habe ich versucht zu sagen. Die Methodensignatur wurde von AnyObject in Any geändert, sodass Ihre Methode mit AnyObject nicht als 'didFinishLaunching'-Methode erkannt wurde. – Yannick

+0

Es ist ziemlich verrückt, dass die Konvertierung diese Funktion nicht konvertiert und dazu führt, dass sie nicht aufgerufen wird .... – jarryd

2

Haben Sie die didFinishLaunchingWithOptions in einem Ihrer ViewControllers umgesetzt? Die benutzerdefinierte Implementierung dieser Methode wird nicht aufgerufen. Diese Methode ist in der ApplicationDelegate definiert und wird immer aufgerufen, sobald die App gestartet wird. Wenn Sie die Methode in keiner ViewController erneut definiert haben und die in AppDelegate nicht aufgerufen wird, versuchen Sie, den Simulator zurückzusetzen. Aus dem Simulatormenü Simulator -> Reset content and settings.

Wenn Compiler fordert die didFinishLaunchingWithOptions Methode Privat dann die Parameter des Verfahrens zu machen, könnten den Fehler verursachen. Der Parameter der Anwendung (_: didFinishLaunchingWithOptions :) Delegatmethode nun Swift als überbrückt [UIApplicationLaunchOptionsKey: Alles] ?, anstatt ein [NSObject: ANYOBJECT] ?. Ändern Sie die Methodensignatur wie gezeigt.

+0

Zurücksetzen Versuchte Inhalte und Einstellungen, hat nicht funktioniert. Und nein, ich habe die Methode nirgendwo anders implementiert, ich weiß, das ist nutzlos, da es eine Delegiertenmethode ist.Ich gehe immer noch davon aus, dass es etwas mit der Warnung zu tun hat, die ich erhalte, wenn ich vor dem Methodenaufruf den 'privaten' loswerde. Oder zumindest könnte es die private Anweisung sein, die dazu führt, dass die Methode zur Laufzeit ignoriert wird? –

+0

Versuchen Sie die bearbeitete – Mathews

0

Diese Methode ist im ApplicationDelegate definiert und wird immer aufgerufen, sobald die App gestartet wird. Wenn Sie die Methode in keinem ViewController neu definiert haben und die Methode in AppDelegate nicht aufgerufen wird, versuchen Sie, den Simulator zurückzusetzen.

öffnen Simulator -> Menü Simulator -> Zurücksetzen Inhalte und Einstellungen.

-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
//.. 
} 
2

für Swift ~ 3.0 didFinishLaunchingWithOptions ersetzen mit Unterschrift follwing

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 
} 
Verwandte Themen