Non dimenticare che se stai provando a eseguire questo come un foglio "modale" (ovvero, esso riprende l'app fino a quando l'utente non lo abbandona), dovrai eseguire un nuovo ciclo di esecuzione.
Quello che hai fatto è stato mostrato il foglio, e quindi non ha spinto un nuovo ciclo, quindi il sistema operativo mostra solo il foglio, vede che non c'è motivo di mantenerlo in esecuzione, quindi lo spegne e riprende l'esecuzione sul prossimo linea:
io di solito faccio fogli seguente modo:
- (id)showPanelModalAgainstWindow: (NSWindow *)window
{
[[NSApplication sharedApplication] beginSheet: panelToShow
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
[[NSApplication sharedApplication] runModalForWindow: panelToShow];
if (m_returnCode == NSCancelButton) return nil;
}
- (void)sheetDidEnd:(NSWindow *)sheet
returnCode:(int)returnCode
contextInfo:(void *)contextInfo
{
UNUSED(sheet);
UNUSED(contextInfo);
m_returnCode = returnCode;
}
Poi, nei vostri accettare e/o annullare le routine dei pulsanti:
- (IBAction)continueButtonClicked:(id)sender
{
UNUSED(sender);
[[NSApplication sharedApplication] stopModal];
[createAccountWizardPanel orderOut: nil];
[[NSApplication sharedApplication] endSheet: createAccountWizardPanel
returnCode: NSOKButton];
}
sono sicuro che c'è modo leggermente meno codice per farlo, ma non ho cercato di approfondirlo, perché in questo modo funziona perfettamente fino a questo punto ...
I commenti precedenti sulla durata del controller e degli oggetti del pannello sono anch'essi rilevante: assicurati di capire esattamente quali oggetti hai bisogno per la durata di vita quando mostri un pannello modale.
Spot on! Grazie molto. –