При запуске не позволяйте приложению на основе документов повторно открывать несохраненный неотредактированный пустой документ, который был открыт при выходе - PullRequest
0 голосов
/ 20 ноября 2018

В простом редакторе rtf, основанном на подклассе NSDocument, при запуске приложения создается файл без названия.Это желаемое поведение.Но если я выйду из приложения с этим открытым, неотредактированным и несохраненным документом (пустым!), Приложение восстановит этот документ при следующем запуске.

Как настроить этот документ, чтобы его нельзя было восстановить.Если я сниму флажок свойства окна контроллера «Восстановить» в IB, документ не будет восстановлен никогда, что не является желательным поведением: отредактированные сохраненные документы, которые не были закрыты пользователем, нуждаются в восстановлении;без названия - неотредактированные документы не должны!

1 Ответ

0 голосов
/ 28 ноября 2018

Я нашел решение.Во-первых, я вложил в класс реализации NSDocumentController и добавил в его файл реализации:

+ (void)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
{
    NSInteger restorable = [state decodeIntegerForKey:@"restorable"];
    if (!restorable) {
        completionHandler(nil, [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil]);
    }
    else {
        [super restoreWindowWithIdentifier:identifier state:state completionHandler:completionHandler];
    }
}

Затем я добавил код в свой файл реализации подкласса NSDocument

- (void) encodeRestorableStateWithCoder:(NSCoder *) coder {

    if (self.fileURL){
        [coder encodeInteger:1 forKey:@"restorable"];
    } else {
        [coder encodeInteger:0 forKey:@"restorable"];
    }
    [super encodeRestorableStateWithCoder:coder];
}

Таким образом, для любого безымянного флага установлено значение 0документ с нулевым fileURL и восстановлением не будет запуск.Другие документы восстановлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...