Вопрос

Я хочу написать приложение, которое может содержать несколько документов в одном окне через интерфейс с вкладками.Следует ли мне избегать архитектуры NSDocument (шаблон приложения на основе документов Cocoa)?Насколько я могу судить, он поддерживает только одно или несколько окон на документ, но не наоборот.

Я некоторое время боролся с этим вопросом и уже построил большую часть своего приложения на архитектуре NSDocument, но не могу найти хороший способ связать несколько документов с одним окном.

РЕДАКТИРОВАТЬ:Я хочу иметь окна документов проекта в дополнение к основным окнам документов.Стоит ли на таком уровне сложности взломать архитектуру NSDocument?Написала ли Apple Xcode (который работает таким образом), используя архитектуру NSDocument?

Это было полезно?

Решение

Несколько лет назад я попытался втиснуть приложение NSDocument в интерфейс с одним окном и вкладками, но через несколько месяцев настолько разочаровался, что вернулся и провел рефакторинг частей архитектуры документа.Это не невозможно, но в конечном итоге вы решаете так много проблем, что конечный результат едва напоминает настоящее приложение NSDocument.Лучше просто переписать те фрагменты, которые вам нужны, чем в конечном итоге получить много кода только для того, чтобы подорвать структуру Cocoa.

Другие советы

У меня есть такой же проект — разные независимые документы, которые я хочу представить в одном окне, с боковой панелью, позволяющей переключаться между документами, — поэтому я немного поискал сам.

Я только что нашел интересную информацию, прочитав книгу Cocoadev. Приложение на основе документов с одним окном для всех документов ссылка.Судя по ответу Майка Трента, использование NSDocument — очень жизнеспособный способ.Вам просто нужно создать подкласс NSDocumentController.

Мне также нравится Идея Абхи использовать дочернее окно без полей.

В этом случае использование архитектуры на основе NSDocument не обязательно является плохой идеей;но для этого может потребоваться немало хакеров.

Вполне вероятно, что вам придется не только создать подкласс NSDocument, но и его, реже, подкласс NSDocumentController.Как только это будет сделано, вам будет несложно перехватить и избегать вызовов -makeWindowControllers и других методов, связанных с окнами, что позволит вам обернуть «окна» документа любым удобным для вас способом, но при этом сохранить преимущества document- основанное приложение.

Другой метод, который я еще не пробовал, но планирую сделать, — это создать окно без полей для каждого документа.Таким образом, один документ имеет одно окно, которое может быть видимым, а может и не быть видимым.

Затем создайте окно-оболочку, содержащее фактическую границу окна, и любые элементы управления для переключения между видимыми окнами документа без полей.Окно документа является дочерним окном оболочки, что гарантирует, что оба окна будут связаны при перемещении/свертывании/закрытии окна и т.д.

Для каждого окна документа без полей окно-оболочка имеет представление-заполнитель, которое при изменении размера изменяет размер окна документа, а также вводит представление окна документа в цепочку респондентов (любое событие, отправленное в представление-заполнитель, будет отправлено в документ представление окна перед передачей родительскому представлению заполнителя).

Есть еще некоторые мелкие детали, которые нужно проработать, но я думаю, что этот подход сработает хорошо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top