我正在用Swift 4为Mac编写一个基于文档的应用程序,根据我的客户需求,该应用程序必须显示一个许可窗口,否则用户将提供其许可密钥。

我在applicationWillFinishLaunching()方法中显示此窗口。当此窗口处于活动状态时,状态恢复方法将在后台运行并加载以前的ns文档,如果没有以前的nsdocument,则创建空文档。
我想避免这种情况,我希望能够选择何时恢复和启动基于文档的应用程序。

我试图在appDelegate方法applicationShouldOpenUntitledFile(_ sender: NSApplication)中拦截该应用程序的启动,但未成功。然后,我已阅读here,如果应用程序状态恢复处于活动状态,则不会调用此方法。
为了确认这一点,我停用了恢复功能,然后不再按预期加载/创建最后一个文档或空文档。大!

但是,然后,我放弃了不错的还原功能。

我想知道是否有更好的方法:在基于文档的应用程序中显示许可屏幕,暂停恢复方法,并在应用程序获得许可后手动调用它们。

谢谢

最佳答案

这是目标C,但这是我这样做的方法,以显示一个对话框,用户必须在其中接受一些许可条件:

在我的AppDelegate中,我获得了一个属性licenseDialogOpen,该属性在应用启动时设置为false。

@synthesize licenseDialogOpen;

- (instancetype)init {
    self = [super init];
    if (self) {
        self.licenseDialogOpen = FALSE;
    }
    return self;
}


在我的Document类中,我重写了windowControllerDidLoadNib

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController {
    [super windowControllerDidLoadNib:windowController];

    AppDelegate *appDelegate = [NSApp delegate];

    if (!appDelegate.licenseDialogOpen) {
        NSAlert *alert = [[NSAlert alloc] init];
        [alert setMessageText:NSLocalizedString(@"License conditions and disclaimer:", nil)];
        [alert setInformativeText:NSLocalizedString(@"License bla bla disclaimer bla bla bla", nil)];
        [alert setAlertStyle:NSAlertStyleWarning];
        [alert addButtonWithTitle:NSLocalizedString(@"Accept", nil)];
        [alert addButtonWithTitle:NSLocalizedString(@"Quit", nil)];

        [alert.window makeFirstResponder:[[alert buttons] firstObject]];

        appDelegate.licenseDialogOpen = TRUE;
        NSModalResponse answer = [alert runModal];
        if (answer != NSAlertFirstButtonReturn) {
            for (NSWindow *window in [NSApplication sharedApplication].windows) {
                [window close];
            }
            [NSApp terminate:self];
        }
    }
}


因此,打开的第一个文档窗口将显示模式对话框,并在用户不接受时退出应用程序。

您可以add a NSTextField to a NSAlert来请求许可证密钥。

关于swift - 在状态恢复发生之前执行代码(macOs),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52930716/

10-11 22:54
查看更多