Выполнить код до восстановления состояния (macOs)

Я пишу основанное на документе приложение для Mac в Swift 4, которое, в соответствии с потребностями моего клиента, должно отображать окно лицензирования, в котором пользователь предоставит свой лицензионный ключ.

Я показываю это окно на applicationWillFinishLaunching() метод. Пока это окно активно, методы восстановления состояния работают в фоновом режиме и загружают предыдущие nsdocuments или создают пустые, если их не было. Я хочу избежать этого, я хочу иметь возможность выбирать, когда начинается восстановление, и ведет себя как приложение на основе документов.

Я пытался перехватить запуск приложения в методе appDelegate applicationShouldOpenUntitledFile(_ sender: NSApplication) но я не был успешным. Тогда я прочитал здесь, что этот метод не вызывается, если восстановление состояния приложения активно. Чтобы подтвердить это, я деактивировал восстановление, а затем последние документы или пустые документы больше не загружались / создавались, как ожидалось. Большой!

Но потом я теряю хороший функционал восстановления.

Мне интересно, есть ли лучший способ сделать это: отображение экрана лицензирования в приложении на основе документов, остановка методов восстановления и вызов их вручную после лицензирования приложения.

Спасибо

1 ответ

Это Цель C, но я сделал это, чтобы показать диалоговое окно, в котором пользователь должен принять некоторые условия лицензии:

В моем AppDelegate, я получил свойство licenseDialogOpen который имеет значение false при запуске приложения.

@synthesize licenseDialogOpen;

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

В моем классе документа я переписал 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];
        }
    }
}

Таким образом, первое открытое окно документа показывает модальное диалоговое окно и закрывает приложение, когда пользователь не принимает.

Вы можете добавить NSTextField к NSAlert, чтобы запросить лицензионный ключ.

Другие вопросы по тегам