windowWillClose: (even if it wasn't open?)

AntilogAntilog Membre
14:30 modifié dans API AppKit #1
Bonjour,

Admettons que j'ai une fenêtre de préférences pour mon application dans une nib (un nib?), cette (ce?) nib est chargé(e) par un singleton au lancement de l'application.

Pour mettre à  jour mes préférences, je positionne un Delegate sur ma fenêtre, et je code la méthode windowWillClose:

Quel ne fut pas mon étonnement de voir cette méthode appelée quand je quitte l'application, même si je n'ai jamais ouvert la fenêtre de préférences   :o.

Bon, en fait, ça ne me dérange pas vraiment, mais comme je n'aime pas faire travailler l'ordinateur pour rien (mettre à  jour des infos qui n'ont aucune chance d'avoir changé), j'ai mis à  jour ma méthode comme ceci:
// ApplicationController est delegate de la fenêtre de préférences<br />- (void)windowWillClose:(NSNotification *)aNotification<br />{<br />	// Test isVisible et isMignaturized, car windowWillClose est appelé à  la fermeture de l&#39;Appl., même si la fenêtre n&#39;a pas été ouverte!<br />	if ([aNotification object] == [prefsWindow] &amp;&amp; ([[aNotification object] isVisible] || [[aNotification object] isMiniaturized]))<br />	{<br />	// Mettre à  jour les préférences

Question 1: isVisible et isMignaturized suffisent pour vérifier que la fenêtre est "affichée"?
Question 2: J'ai fait une bêtise ou est-ce un comportement normal (nib chargé(e) => fenêtre affichée?)
Question annexe: quelqu'un pourra me donner le sexe du/de la nib?  <3

Réponses

  • BruBru Membre
    14:30 modifié #2
    Je pense que oui, c'est un comportement normal.

    Pour le vérifier, il suffit que tu lances l'utilitaire Quartz Debug (dans les applications Developper) pour voir que ta fenêtre, même "non ouverte", est présente dans la liste des fenêtres de ton appli. Simplement, elle est "off-screen", pour montrer qu'elle n'est pas visible.

    Il me parait donc normal que le delegate soit appelé quand le système ferme ces fenêtres, off-screen ou on-screen.

    La méthode isVisible me parait très adapatée à  ton cas (je pense que isMignaturized est redondant).

    .
  • AntilogAntilog Membre
    14:30 modifié #3
    Merci Bru!

    En effet, Quartz Debug est un outil que je devrais utiliser plus  >:)

    Toutefois, j'ai vérifié, il faut bien tester isVisible et isMiniaturized. Une fenêtre dans le doc n'est pas considérée comme visible!
Connectez-vous ou Inscrivez-vous pour répondre.