Как я могу запретить Lion отображать Вы хотите восстановить ваши окна после сбоя? - PullRequest
3 голосов
/ 21 марта 2012

На lion после каждого сбоя при запуске приложения Lion спрашивает, хочу ли я, чтобы оно восстановило окна приложения, поскольку в прошлый раз оно не завершалось должным образом, как я могу отключить это?

ОБЩАЯ ИНФОРМАЦИЯ: Я разрабатываю приложение Cocoa для Lion (и Snow Leopard), это научное приложение (не потребительское, оно используется только дома, без распространения за его пределами). Он взаимодействует с несколькими аппаратными средствами, и он часто падает. (Я знаю, что должен сделать так, чтобы это не приводило к сбою, но здесь задействовано много унаследованного кода на C, а также плохо написанных драйверов и ...).

ВОПРОС: На lion после каждого сбоя при запуске приложения Lion спрашивает, хочу ли я восстановить окна приложения, как я могу отключить это?

Ответы [ 3 ]

6 голосов
/ 26 марта 2012

Кажется, это работает, но ничего не задокументировано, поэтому оно может не работать в будущем обновлении ОС:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ApplePersistenceIgnoreState"];

Предотвращение сохранения льва из штата

2 голосов
/ 14 декабря 2012

Вы можете создать подкласс NSApplication и реализовать restoreWindowWithIdentifier:state:completionHandler: (см. Также Windows восстанавливается автоматически в Руководстве по программированию приложений для Mac для Mac ; в отличие от его родственного метода на NSWindows, этот возвращает BOOL). Например, добавьте свойство preventWindowRestoration в ваш подкласс NSApplication, чтобы вы могли сделать это:

- (BOOL)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
{
    if ([self preventWindowRestoration]) return NO;

    return [super restoreWindowWithIdentifier:identifier state:state completionHandler:completionHandler];
}

Вам необходимо установить свойство applicationWillFinishLaunching: самое позднее, поскольку восстановление происходит между applicationWillFinishLaunching: и applicationDidFinishLaunching:. И не забудьте указать свой подкласс NSApplication в качестве основного класса в Info.plist.

1 голос
/ 13 мая 2016

Ни один из приведенных выше ответов не помог мне (я не пробовал трюк с настройками по умолчанию, но, похоже, он не предназначен для производственного использования). Вот что сработало для меня:

В Xcode откройте окно xib раскадровки и выберите NSWindow.

Показать панель «Утилиты» (всплывающее окно справа) и выберите «Инспектор атрибутов» (выглядит как регулятор ползунка) и снимите флажки «[] Восстановим» и «[] Видимый при запуске».

Восстанавливаемое свойство может быть установлено для создаваемых вами окон:

NSWindow* window = ...
window.restorable = NO;

Я не могу найти лучшее время для установки свойства window.visible, но установка его в xib работает для меня.

...