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