Выполнить код до восстановления состояния (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, чтобы запросить лицензионный ключ.