EDIT: Hier ganze ist code example für Xcode 6.4viewDidLoad wird aufgerufen, bevor ganz init-Methode ausgeführt wird
Ich habe einfach iOS-Anwendung ohne Storyboards. Ich habe rootViewController
für UIWindow
in AppDelegate.swift
wie folgt aus:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let tabBarController = TabBarController()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
TabBarController
Klasse Implementierung ist wie folgt:
viewDidLoad
init(nibName: bundle:)
It:
class TabBarController: UITabBarController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Next line is called after 'viewDidLoad' method
println("init(nibName: bundle:)")
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
println("viewDidLoad")
}
}
Wenn ich Anwendung laufen die Konsolenausgabe wie folgt aussieht bedeutet, dass Zeilen nach der Zeile super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
nach viewDidLoad
Methode aufgerufen werden! Dies tritt nur für Klassen auf, die von UITabBarController
erben. Wenn Sie das gleiche Beispiel mit UIViewController
Nachkommen versuchen, ist alles in Ordnung und viewDidLoad
wird aufgerufen, nachdem die Init-Methode ausgeführt wurde.
Vielen Dank. Aber ich denke, das ist inkonsistentes Verhalten und ist nicht gut dokumentiert. Ich sende TSI an Apple und ich bin daran interessiert, ihre Antwort zu sehen. – Deny
@Deny Ich würde gerne hören, was Apple zu sagen hat, wenn sie Ihnen eine Antwort geben, aber ich vermute, dass Sie nicht viele zusätzliche Informationen erhalten werden. Dies ist ein Standardverhalten von iOS. Sie haben jedoch recht, wenn es um die fehlende Dokumentation für die TabBarController-Unterklassen geht. – Artal