При запуске не позволяйте приложению на основе документов повторно открывать несохраненный неотредактированный пустой документ, который был открыт при выходе

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

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

1 ответ

Я нашел решение. Во-первых, я вложил в класс 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, и не будет восстановления при запуске. Другие документы восстановлены.

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