EDIT: Ecco tutta code example per Xcode 6.4viewDidLoad viene chiamato prima il metodo init tutto viene eseguito
ho semplice applicazione iOS, senza storyboard. Ho impostato rootViewController
per UIWindow
in AppDelegate.swift
come questo:
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
implementazione della classe è la seguente:
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")
}
}
Quando eseguo applicazione l'uscita della console si presenta così:
viewDidLoad
init(nibName: bundle:)
E ' significa che le linee dopo la linea super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
vengono chiamate dopo il metodo viewDidLoad
! Ciò si verifica solo per le classi che ereditano da UITabBarController
. Se provi questo stesso esempio con il discendente UIViewController
, tutto è ok e viewDidLoad
viene chiamato dopo l'esecuzione del metodo init.
Grazie. Ma penso che questo sia un comportamento incoerente e non è ben documentato. Invio TSI ad Apple e sono interessato a vedere la loro risposta. – Deny
@Deny Mi piacerebbe sentire quello che Apple ha da dire quando ti danno una risposta, ma ho il sospetto che non sarà possibile ottenere molte informazioni aggiuntive. Questo è un comportamento standard di iOS. Hai ragione per quanto riguarda la mancanza di documentazione per la sottoclasse TabBarController. – Artal