Как Xcode настраивает приложение на основе документа?

Я изучаю Какао, и, как я понял из чтения документации, при запуске приложения происходит следующее:

  1. Создается общий экземпляр приложения.
  2. Главный файл пера ищется из списка свойств приложения, чтобы приложение знало, какой перо загружать.
  3. запускается цикл выполнения.

Это нормально и имеет смысл для приложения с одним окном, однако меня смущает то, что делает xcode, когда приложение на основе документа создается.

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

Основываясь на моем понимании того, как работает приложение, описанное выше, я не понимаю, как мое приложение узнает, что нужно открывать окно документа после того, как перо меню было найдено из список собственности. Насколько я могу судить, для этого не сгенерирован код (кроме метода windowNibName , но откуда он вызывается?)

Кто-нибудь может сказать мне, что xcode делает иначе, чтобы приложение знало что он основан на документе и, следовательно, должен открывать окно документа?

Обновление:

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

Прочитав документы за последние пару дней, я думаю Я знаю, как это работает, но не уверен:

  1. _NSApplication_ имеет метод делегата applicationOpensUntitledFile , который вызывается делегатом приложения.
  2. NSDocumentController установлен как делегат приложений по умолчанию и по умолчанию Реализация ищет наличие CFBundledTypeInfo , чтобы определить, основан ли документ на документе или нет, и отвечает в соответствии с требованиями приложения (IE ДА для приложений на основе документов и НЕТ для приложений с одним окном).
  3. В большинстве случаев, когда создается приложение с одним окном, делегат приложения в любом случае заменяется настраиваемым AppController , который обычно не содержит определения для приложения. ionOpenUntitledFile , поскольку он не подходит для данного типа приложения.

Надеюсь, любые эксперты по Какао смогут подтвердить, правильно ли я понимаю, или я лаю не на то дерево.

8
задан Benjamin Gale 29 June 2011 в 11:35
поделиться