Vérifier si une fenêtre n'est pas déjà ouverte dev Mac os x

Pedro14

Membre enregistré
22 Juin 2011
4
0
33
Bonjour à tous,
Je suis en train de développer un petit programme et j'ai un soucis.
J'ai créer un NSStatusBar et dedans un menu qui me permet de choisir différente chose. L'un des choix est "Préférences". Quand je clique dessus, cela exécute le code suivant :

Bloc de code:
- ([COLOR="Magenta"]IBAction[/COLOR])ouvrirPreference:([COLOR="Magenta"]id[/COLOR])sender {
        [[COLOR="DarkOrchid"]NSBundle[/COLOR]  [COLOR="Navy"]loadNibNamed[/COLOR]:[COLOR="Red"]@"preferences"[/COLOR] [COLOR="navy"]owner[/COLOR]:[COLOR="DarkOrchid"]NSApp[/COLOR]]; [COLOR="SeaGreen"]// Ouvre preferences.xib[/COLOR]
}

Ce code ouvre donc ma fenêtre "Préférences". Le problème est que si je refais la manipulation, la fenêtre s'ouvre une deuxième fois et je me retrouve donc avec deux fenêtres identiques.

Quelle condition peut-on ajouter ici pour éviter le problème de doublage des fenêtres ?

Par ailleurs, voici le contenu de mes fichiers .h et .m

gestionFenetres.h

Bloc de code:
[COLOR="Sienna"]#import [/COLOR][COLOR="Red"]<Foundation/Foundation.h>[/COLOR]

[COLOR="Magenta"]@interface[/COLOR] gestionFenetres : [COLOR="DarkOrchid"]NSObject[/COLOR] {
    [COLOR="DarkOrchid"]NSWindow[/COLOR] *preferences;
}

[COLOR="Magenta"]@property[/COLOR] ([COLOR="Magenta"]assign[/COLOR]) [COLOR="Magenta"]IBOutlet[/COLOR] [COLOR="DarkOrchid"]NSWindow[/COLOR] *preferences;

[COLOR="Magenta"]@end[/COLOR]

gestionFenetres.m

Bloc de code:
[COLOR="Sienna"]#import[/COLOR] [COLOR="Red"]"gestionFenetres.h"[/COLOR]

[COLOR="Magenta"]@implementation[/COLOR] gestionFenetres
[COLOR="Magenta"]@synthesize[/COLOR] preferences = [COLOR="Teal"]preferences[/COLOR];

- ([COLOR="Magenta"]IBAction[/COLOR])ouvrirPreference:([COLOR="Magenta"]id[/COLOR])sender {
        [[COLOR="DarkOrchid"]NSBundle[/COLOR]  [COLOR="navy"]loadNibNamed[/COLOR]:[COLOR="Red"]@"preferences"[/COLOR] [COLOR="navy"]owner[/COLOR]:[COLOR="DarkOrchid"]NSApp[/COLOR]]; [COLOR="SeaGreen"]// Ouvre preferences.xib[/COLOR]
}

- ([COLOR="Magenta"]IBAction[/COLOR])btAnnuler:([COLOR="Magenta"]id[/COLOR])sender {
    [[COLOR="Teal"]preferences[/COLOR] [COLOR="navy"]performClose[/COLOR]:[COLOR="Magenta"]self[/COLOR]];
}

[COLOR="Magenta"]@end[/COLOR]

Merci par avance.
 
preferences n'est pas à nil avant de passer dans loadNibNamed ...
Ene général on met :
Bloc de code:
if(preferences != nil)
{
       [NSBundle loadNibNamed:@"preferences" owner:NSApp]; // Ouvre preferences.xib
}
et surtout :
Bloc de code:
if(preferences != nil)
{
    [preferences performClose:self];
}
Ca t'évitera des crashs sur des pointeurs nuls.
Et tu as le droit d'ajouter des variables pour gérer l'état de ta fenêtre.