Nie zapominaj, że jeśli próbujesz uruchomić to jako arkusz "modalny" (tzn. Przejmuje on aplikację, dopóki użytkownik go nie odrzuci), musisz nacisnąć nową pętlę uruchamiania.
To, co zrobiłeś, to pokazany arkusz, a następnie nie pchnął nowej pętli, więc system operacyjny po prostu pokazuje arkusz, widzi, że nie ma powodu, aby go uruchamiać, a tym samym zamyka go i wznawia wykonywanie w następnym linia:
ja zazwyczaj Blachy zrobić w następujący sposób:
- (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;
}
Następnie w swoim akceptują i/lub anuluj rutyny:
- (IBAction)continueButtonClicked:(id)sender
{
UNUSED(sender);
[[NSApplication sharedApplication] stopModal];
[createAccountWizardPanel orderOut: nil];
[[NSApplication sharedApplication] endSheet: createAccountWizardPanel
returnCode: NSOKButton];
}
Jestem pewien, że jest trochę mniej kodu, ale nie zagłębiałem się w to, ponieważ ten sposób działa do tej pory perfekcyjnie dobrze ...
Poprzednie komentarze dotyczące czasu życia kontrolera i obiektów panelu są również istotne - upewnij się, że dokładnie wiesz, jakie obiekty potrzebujesz na czas życia podczas wyświetlania panelu modalnego.
Spot na! Wielkie dzięki. –