Je l'ai décomposé en un très petit projet. En utilisant le code suivant dans le délégué de l'application:Cocoa: Affichage d'une erreur après que NSApp beginSheet aboutisse à la fenêtre principale
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
TestingWindowController * testingWindowController = [[TestingWindowController alloc] initWithWindowNibName: @"TestingWindowController"];
// Begin our sheet
[NSApp beginSheet: testingWindowController.window
modalForWindow: self.window
modalDelegate: self
didEndSelector: @selector(windowDidEnd:returnCode:contextInfo:)
contextInfo: NULL];
}
- (void)windowDidEnd:(id)alert returnCode:(NSInteger)returnCode contextInfo:(id) contextInfo
{
// If the user did not accept, then we really don't care what else they did!
if (returnCode != NSOKButton) return;
// We have had an error. Display it.
[[NSApplication sharedApplication] presentError: nil
modalForWindow: self.window
delegate: nil
didPresentSelector: nil
contextInfo: NULL];
}
Et l'action suivante liée à bouton sur la pointe des fenêtres. (Notez que la fenêtre de la plume est également configurée pour ne pas être visible au lancement).
- (IBAction) onClose: (id) sender
{
[[NSApplication sharedApplication] endSheet: self.window
returnCode: NSOKButton];
[self.window orderOut: nil];
} // End of onClose
Ce qui finit par se produire est, une fois que je les onClose
fonctionne, toutes les fenêtres disparaissent et je suis resté avec rien, mais la boîte de dialogue d'erreur (la fenêtre principale a disparu).
Y at-il un problème avec mon code? Pourquoi ma fenêtre principale disparaît-elle?
REMARQUE: Je sais que je ne transmets pas d'erreur à la méthode presentError. J'ai délibérément laissé cette null car je n'ai eu que peu de temps pour écrire l'exemple de code. Passer une erreur réelle entraîne le même comportement. Un exemple de projet est disponible here.
Merci , mais malheureusement, cela n'a pas résolu le problème. J'ai essayé d'utiliser les méthodes 'beginSheet' et' endSheet' mais j'ai toujours rencontré la même chose. (La fenêtre principale disparaît). – Kyle
@Zenox: Votre code édité montre toujours que vous fermez la mauvaise fenêtre dans la méthode onClose - testingWindowController.window est la feuille que vous voulez terminer et ne pas commander self.window – rdelmar
La méthode onClose est dans TestingWindowController (son le sélecteur pour un bouton cliquez sur le panneau). Donc self.window serait correct dans ce contexte, n'est-ce pas? – Kyle