1

我的可可程序有一个保存功能,当用户选择保存目的地时,我将不得不调出另一个 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

4

1 回答 1

2

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

于 2013-04-19T13:53:23.797 回答