Objective c can';在NSSavePanel中按OK后是否调用beginSheet?

Objective c can';在NSSavePanel中按OK后是否调用beginSheet?,objective-c,cocoa,nsapplication,nssavepanel,cocoa-sheet,Objective C,Cocoa,Nsapplication,Nssavepanel,Cocoa Sheet,我的cocoa程序有一个保存功能,当用户选择保存目标时,我必须打开另一个NSPanel,以显示某种状态(即完成文件保存需要多长时间)。以下是我的代码: - (IBAction)savePressed:(id)sender { __block NSSavePanel *saveDlg = [NSSavePanel savePanel]; // Enable options in the dialog. [saveDlg setCanCreateDirectories:YES

我的cocoa程序有一个保存功能,当用户选择保存目标时,我必须打开另一个NSPanel,以显示某种状态(即完成文件保存需要多长时间)。以下是我的代码:

- (IBAction)savePressed:(id)sender {
    __block NSSavePanel *saveDlg = [NSSavePanel savePanel];
    // Enable options in the dialog.
    [saveDlg setCanCreateDirectories:YES];
    [saveDlg setAllowedFileTypes:[NSArray arrayWithObject:@"zip"]];
    [saveDlg setCanSelectHiddenExtension:YES];
    [saveDlg beginSheetModalForWindow:self.window completionHandler:^ (NSInteger result) {
        if (result == NSOKButton) {
            [self triggerNSPanel];
        }

        saveDlg = nil;

    }];

}

- (void) triggerNSPanel {
    if (!self.myPanel)
        self.myPanel = [[NSPanel alloc] init];
    [NSApp beginSheet:self.myPanel modalForWindow:self.window modalDelegate:nil didEndSelector:nil contextInfo:nil];
....
}

因此,一旦NSSavePanel消失(即按下ok),我的NSPanel显示了大约1/2秒,然后它就消失了,即使我没有调用NSApp endSheet

也可能是一个问题,您可以从完成处理程序中调用beginSheet。调用后可能会进行一些清理,从而终止第二张工作表。请尝试通过PerformSelect:afterDelay发送triggerNSPanel(延迟可以是0,因此它在下一轮运行循环中会被触发)。

是的,我将代码更改为:[self-performSelector:@selector(TriggernPanel)withObject:nil afterDelay:0];现在它工作得很好,非常感谢您的帮助:)