В моем проекте мне нужно уметь различать документы, созданные пользователем, и те, которые были восстановлены при запуске приложения restoreStateWithCoder, потому что есть некоторые вещи, которые должны быть сделано для новых документов, но не восстановлено. Как я могу это сделать?Дифференциация между новыми документами и восстановленными документами в приложении Cocoa
ответ
Как насчет подкласса «NSDocument
» и с использованием этого подкласса для вашего документа?
Затем вы можете поймать «restoreStateWithCoder
», как это происходит, и установить уникальный флаг (например, свойство BOOL) для тех документов, которые восстанавливаются с диска и не создаются свежим с помощью команды «Файл -> Создать».
Вы также можете попробовать "method swizzle" "restoreStateWithCoder
", но вам нужно решить, какое свойство установить в каком объекте.
[Ответ это для Свифта, но общая идея работает для Objective-C, а]
Когда документ является новым, вы обычно получаете вызов следующей функции:
convenience init(type tyepName: String) throws
Вы можете установить флаг в этой функции (скажем needSpecialHandling = true
, переменная, которая первоначально была инициализирована до false
), чтобы сказать, нужна ли вам специальная обработка для таких случаев.
Тогда в функции makeWindowControllers()
вы используете эту переменную, чтобы вызвать применение специального кода (если true
) так же, как это возможно, вызывается в функции windowControllerDidLoadNib
.
- 1. Различия между документами и документами в угловом
- 2. MapReduce между последовательными документами
- 3. поиск отношений между родителями и дочерними документами
- 4. Сходство между двумя текстовыми документами
- 5. Как выбрать между открытыми документами?
- 6. Как получить разницу между документами
- 7. Соответствие Различия между двумя документами
- 8. Sphinx соединение между двумя документами
- 9. Поиск сходства между двумя документами
- 10. Как проверить ссылки между документами?
- 11. OpenXml: Копировать OpenXmlElement между документами
- 12. Mongoid: отношения между встроенными документами
- 13. MongoDB DATEDIFF между несколькими документами
- 14. Mongo документы с документами с документами (дерево!)
- 15. Связи между документами с якорем
- 16. Запрос с соединением между документами
- 17. Как управлять документами между Word и HTML?
- 18. Управление документами
- 19. Проверка дубликатов документов и аналогичных документов в приложении управления документами
- 20. Проектирование отношений между документами в Couchbase/CouchDB?
- 21. Добавить границу между двумя документами в ArangoDB
- 22. Как обмениваться документами между тестами в PHPUnit
- 23. Как связать между документами уценки в doxygen?
- 24. Работа с документами WPF?
- 25. Принимая разницу между смежными документами в mongoDB
- 26. Сравнение полей между документами в запросе Solr
- 27. Управление документами, SCM?
- 28. R: Восстановить матрицу с теми же документами с новыми данными
- 29. Смешивание и совпадение с документами
- 30. Обмен документами и другим документооборотом
Я уже использую подкласс NSDocument, который пришел с проектом и реализует restoreStateWithCoder, чтобы реализовать пользовательские инструкции по восстановлению. Проблема заключается в том, что подготовительные действия, упомянутые в исходном сообщении, происходят в windowControllerDidLoadNib, который происходит перед восстановлением, делая любые настраиваемые флаги спорными. –
Что вы делаете, и почему вы не можете отключить или скрыть их, как только вы поймете, что файл был восстановлен и не совсем новый? –
Приложение на самом деле является веб-браузером, поэтому, несмотря на то, что я использую архитектуру нескольких документов, нет реального документа. Я использую windowControllerDidLoadNib для создания новой вкладки при открытии нового окна и, при необходимости, в зависимости от предпочтений пользователя, загрузки домашней страницы. Это связано с восстановлением табуляции. Я мог бы просто очистить вкладку сразу после создания при восстановлении, но это кажется ужасно неэффективным и расточительным. –