Я изучаю Какао, и, прочитав документацию, я понимаю, что при запуске приложения происходит следующее:
- Создан общий экземпляр приложения.
- Основной файл пера ищется из списка свойств приложений, чтобы приложение знало, какой пиб загрузить.
- цикл запуска запущен.
Это нормально и имеет смысл для одного оконного приложения, однако меня смущает то, что делает xcode при создании основанного на документе приложения .
В этом случае есть два файла пера; первый содержит меню приложения, а второй - окно, представляющее подкласс NSDocument . когда я запускаю приложение, новое окно документа открывается автоматически.
Основываясь на моем понимании того, как работает приложение, описанное выше, я не понимаю, как мое приложение знает, как открыть окно документа после того, как перо меню было найдено из списка свойств. Насколько я вижу, не было сгенерированного кода для этого (за исключением метода windowNibName , но откуда он вызывается?)
Может кто-нибудь сказать мне, что xcode делает по-другому, чтобы приложение знало, что оно основано на документе, и поэтому ему нужно открыть окно документа?
Обновление:
Я пытаюсь понять, как XCode знает, как сделать что-то другое, если мое приложение настроено как приложение на основе документов, а не как приложение с одним окном. Насколько мне известно, нет никаких настроек, чтобы указать это, и XCode, кажется, не генерирует какой-либо код, чтобы дать это другое поведение.
Из чтения документов за последние пару дней я думаю Я знаю, как это работает, но я не уверен:
- _NSApplication_ имеет метод делегата applicationOpensUntitledFile , который вызывается делегатом приложения.
- NSDocumentController устанавливается в качестве делегата приложений по умолчанию, а реализация по умолчанию ищет наличие CFBundledTypeInfo , чтобы определить, является ли документ основанным на документе, и отвечает соответствующим образом. для приложения (IE YES для приложения на основе документов и NO для приложений с одним окном).
- В большинстве случаев при создании приложения с одним окном делегат приложения заменяется пользовательским AppController , который обычно не содержит определения для метода applicationOpenUntitledFile , как есть не подходит для типа приложения.
Надеюсь, что любой эксперт по какао сможет подтвердить, правильно ли я понимаю, или я лаю не на том дереве.