Modal Dialog qui n'apparait pas comme il faut [Résolu]
npanti
Membre
Bonsoir à tous,
Je voudrais faire apparaitre une modal dialog mais elle ne veux pas apparaitre en glissant sous la barre d'état de l'application. Elle apparait simplement comme une nouvelle fenêtre
J'obtiens l'erreur suivante:
Voici le code source des fonctions que j'utilise pour afficher cette modal dialog
Voici la structure de mon programme
Ma classe Stock_AppDelegate possède un attribut NSWindow *window qui est bien lié dans Interface Builder à la fenêtre principale de mon application
J'ai donc un peu de mal à comprendre cette erreur, de plus le NSLog me retourne bien une NSWindow.
Si quelqu'un sait comment régler ce problème.
D'avance merci
Je voudrais faire apparaitre une modal dialog mais elle ne veux pas apparaitre en glissant sous la barre d'état de l'application. Elle apparait simplement comme une nouvelle fenêtre
J'obtiens l'erreur suivante:
2010-07-11 19:21:52.492 Stock[40634:a0f] *** Assertion failure in -[NSApplication _commonBeginModalSessionForWindow:relativeToWindow:modalDelegate:didEndSelector:contextInfo:], /SourceCache/AppKit/AppKit-1038.32/AppKit.subproj/NSApplication.m:3100<br />2010-07-11 19:21:52.492 Stock[40634:a0f] Modal session requires modal window
Voici le code source des fonctions que j'utilise pour afficher cette modal dialog
- (void)openAddStockSheet:(NSWindow *)sheet<br />{<br /> if (!sheet)<br /> [NSBundle loadNibNamed:@"AddStock" owner:self];<br /> <br /> NSLog(@"%@", [super window]);<br /> [NSApp beginSheet:sheet<br /> modalForWindow:[super window]<br /> modalDelegate:self<br /> didEndSelector:nil<br /> contextInfo:nil];<br /> <br /> [NSApp runModalForWindow:sheet];<br /> [NSApp endSheet:sheet];<br /> [sheet orderOut:self];<br />}<br /><br />- (IBAction)closeAddStockSheet:(id)sender<br />{<br /> [NSApp stopModal];<br />}<br /><br />- (IBAction)showAddStockSheet:(id)sender<br />{<br /> [self openAddStockSheet:addStockSheet];<br />}
Voici la structure de mon programme
Ma classe Stock_AppDelegate possède un attribut NSWindow *window qui est bien lié dans Interface Builder à la fenêtre principale de mon application
J'ai donc un peu de mal à comprendre cette erreur, de plus le NSLog me retourne bien une NSWindow.
Si quelqu'un sait comment régler ce problème.
D'avance merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut que tu choisisses entre les deux:
- une sheet est une fenêtre attachée en haut d'une autre: la fenêtre parente est bloquée, mais les autres fenêtres (par ex. autres documents), peuvent toujours être manipulées.
- une fenêtre modale bloque tout le court de l'application et empêche de mettre les autres fenêtres au 1er plan.
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Sheets/Tasks/UsingAppModalDialogs.html#//apple_ref/doc/uid/TP40001207-BABFIBIA
Même erreur si je choisi l'une ou l'autre. C'est à n'y rien comprendre.
Pour moi, l'erreur vient de [super window], elle est bien visible ?
Parce que comme ton code est écrit, tu attends que loadNibNamed modifie le contenu de la variable locale "sheet", ce qui est impossible.
Manu
Soit, window est une méthode, alors on peut faire [self window];
Soit, c'est une variable d'instance et elle est accessible directement (sauf si déclaré private)
Et ta classe Stock_AppDelegate, elle hérite de qui ?
Sur mon diagramme de classe tu peux voir que Stock_AppDelegate hérite de NSObject et dans cette classe une variable NSWindow est lié via IB à ma fenêtre principale
En fait tu fais l'appel depuis stockListController ?
Typiquement, cette erreur survient lorsqu'il y a un problème avec le fenêtre parente (nil, pas une fenêtre, pas ouverte, etc)
J'ai aussi implémenter une autre classe pour gérer l'ouverture de mon sheet.
@manu57, mon sheet n'était pas nul vu qu'il s'affichait, il ne s'affichait juste pas en glissant sous le haut de ma fenêtre principale comme il aurait du.
Merci à tous
Ton sheet s'affichait parce que le flag "visible at launch" est setté par defaut dans IB, et donc la fenêtre sheet est affichée automatiquement lors du chargement du nib.
Ceci étant, content que tu ais résolu ton problème.
Manu
Admettons, mais conceptuellement, c'est quand même déboussolant pour l'utilisateur.