2016-12-01 1 views
0

Cela me rend fou. J'ai quelques fenêtres dans mon application que j'ouvre via un menu. J'ai maintenant ajouté une nouvelle fenêtre, mais windowDidLoad n'est jamais appelée.windowDidLoad n'est pas appelé (encore)

fileprivate let paymentWindowController = PaymentWindowController(windowNibName:"PaymentWindow") 

est la déclaration dans mon AppDelegate où je lance un

paymentWindowController.loadWindow() 

dans son applicationDidFinishLaunching.

Quand mon menu est cliqué, il invoque

@IBAction func showPayments(_ sender: Any) { 
    paymentWindowController.window!.makeKeyAndOrderFront(self) 
} 

Le PaymentWindowController est juste l'échafaud qui est créé par un nouveau fichier/Cacao/NSWindowController:

class PaymentWindowController: NSWindowController { 
    override func windowDidLoad() { 
    super.windowDidLoad() 
    print("never been here") 
    } 
} 

Le XIB n'a que la fenêtre unique aussi de l'échafaud. (Je viens de renommer le XIB de PaymentWindowController.xib en PaymentWindow.xib comme je l'ai fait pour les autres fenêtres aussi.)

Toutes les autres fenêtres ont été créées de la même manière et fonctionnent comme prévu. Mais ce bâtard ne fonctionnera pas comme il se doit. J'ai également nettoyé le projet et même effacé les données dérivées.

+0

Avez-vous essayé de supprimer votre xib, de nettoyer le projet et de reconstruire le xib? Je rencontre parfois des problèmes comme ceux-ci avec des xibs personnalisés, et parfois la reconstruction est la seule chose qui fonctionne. Probablement pas la réponse que vous espériez, mais ça vaut le coup! Il y a d'autres questions similaires sur les SO que je suis sûr que vous pouvez tirer aussi bien. Je pourrais tirer des réponses de ceux-ci, mais ce serait redondant à ce moment-là. Vous avez probablement tout vu. Bonne chance! – user3353890

+0

@ user3353890 Il est vraiment tirant les cheveux ... Voir ma propre réponse. –

+0

Heureux que vous l'ayez compris! – user3353890

Répondre

0

Il se trouve que je dois ajouter

override func awakeFromNib() { 
    // initialize 
} 

à mon code qui obtient effectivement appelé. Aucune idée pourquoi je me suis fait avoir par windowDidLoad qui est créé par l'échafaud mais ne se fait jamais appeler.