У меня есть приложение на основе NSDocument с подклассом NSDocumentController. Мой NSDocument работает как с URL-адресами файлов, так и с URL-адресами с пользовательской схемой, использующей веб-службу.Приложение на основе документов не восстанавливает документы с не файловыми URL-адресами
Я обрабатываю большую часть загрузки и сохранения с использованием пользовательского кода, включая -saveToURL:ofType:forSaveOperation:completionHandler:
. +autosavesInPlace
возвращает YES
.
Проблема, с которой я столкнулся: документы с настраиваемой схемой URL не восстанавливаются при запуске. Документы с файловой схемой URL-адреса - это как обычные документы, сохраненные в файлах, так и неопубликованные документы, которые являются автосохраненными.
После выхода из открытых документов на базе сервера и выхода из приложения, методы NSDocument не вызываются при перезагрузке. В частности, ни один из четырех инициализаторов не называется:
- -init
- -initWithContentsOfURL: OfType: ошибка:
- -initForURL: withContentsOfURL: OfType: ошибка:
- -initWithType: ошибка:
Метод NSDocumentController -reopenDocumentForURL:withContentsOfURL:display:completionHandler:
также не называется.
Как и когда закодировано состояние восстановления документов? Как и когда они декодируются?
Это была большая помощь при запуске. Оказывается, история сложнее: на самом деле это NSDocument, а не NSWindow, который отвечает за кодирование состояния * document * (нумерованный идентификатор, url, имеет последние изменения, тип) в собственной реализации '-encodeRestorableStateWithCoder:'. NSDocumentController использует эту информацию о состоянии для восстановления документа, затем вызывает '-makeWindowControllers' и NSApplication (или обработчик завершения NSApplication?), Восстанавливает окно. Кроме того, при использовании пользовательского подкласса NSDocumentController AppKit устанавливает * этот * класс как 'restoreClass'. – paulmelnikow