Используйте ИДЕЯ IntelliJ IDE от JetBrains - создатель ReSharper. "Это не похоже на resharper" - это - оригинал, и resharper похож на это для C#.
Звучит как классический случай установки флажка «Видимость при запуске» для панели в IB. Выключи это.
Да, вам необходимо владеть этим контроллером, пока вы хотите, чтобы он продолжал работать. Вы не можете просто создать его, автоматически выпустить и позволить ему умереть - вам нужно удерживать его столько, сколько вам нужно.
Не забывайте, что если вы пытаетесь запустить это как «модальный» лист (т. Е. Он принимает приложение до тех пор, пока пользователь его не закроет), вам нужно будет нажать новый цикл выполнения.
То, что вы сделали, отображается листом, а затем не запускает новый цикл, поэтому ОС просто показывает лист, видит, что нет причин для его продолжения, и, таким образом, закрывает его и возобновляет выполнение на следующей строке. :
Обычно я делаю листы следующим образом:
- (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;
}
Затем, в ваших подпрограммах кнопок принятия и / или отмены:
- (IBAction)continueButtonClicked:(id)sender
{
UNUSED(sender);
[[NSApplication sharedApplication] stopModal];
[createAccountWizardPanel orderOut: nil];
[[NSApplication sharedApplication] endSheet: createAccountWizardPanel
returnCode: NSOKButton];
}
Я уверен, что есть способ сделать это немного менее кодовым, но я ' я не вдавался в подробности, потому что этот способ пока работает отлично ....