Как запустить приложение на основе документов MacOS? - PullRequest
0 голосов
/ 11 февраля 2020

Я изучаю архитектуру приложений на основе документов при разработке приложений MacOS, но смущен этим.

Я создал приложение на основе документов в XCode. Шаблон приложения создал простое основанное на документе приложение. Он может работать и автоматически создаст новый документ при запуске.

Мой вопрос: как это приложение запускает архитектуру документа? Я предполагаю, что должен быть какой-то код, подобный следующему:

NSDocumentController *docController;
docController = [NSDocumentController sharedDocumentController];
[docController newDocument:self];

Но я не могу найти такой код в созданном приложении. Метод - (void) applicationDidFinishLaunching: в делегате приложения пуст. Кроме того, в главном файле пера нет объекта NSDocumentController.

Итак, как это приложение узнает, что оно должно использовать архитектуру документа, инициализировать NSDocumentController, а затем создать новый документ?

1 Ответ

0 голосов
/ 12 февраля 2020

как это приложение узнает, что оно должно использовать архитектуру документа, инициализировать NSDocumentController, а затем создать новый документ?

Мне неясно, как работает Xcode, но похоже, что в info.plist приложения CocoaNSDocumentClass должен быть установлен на Document, а Role должен быть установлен на Editor (или Viewer, None или Shell) для создания документа. В своей демонстрации попробуйте удалить одну или обе эти строки в списке и посмотрите, работает ли приложение. Обе настройки расположены на втором уровне типов документов. По моему опыту, удаление любой из этих строк ломает приложение, а восстановление правильных настроек исправляет его. В программно созданном приложении на основе документов (без пера) и компиляции с помощью Terminal следующие ошибки генерируются, когда я go внутри пакета и запускаю исполняемый файл после удаления одной или других настроек info.plist, упомянутых выше.

2020-02-11 19:31:48.294 nsdoc_demo[1606:658926] NSDocumentController Info.plist warning: The values of CFBundleTypeRole entries must be 'Editor', 'Viewer', 'None', or 'Shell'.

2020-02-11 19:38:46.355 nsdoc_demo[1748:680819] -[NSWindowController loadWindow]: failed to load window nib file 'Document'.

Xcode (с Document.xib) генерирует следующую ошибку, когда CocoaNSDocumentClass не установлен:

2020-02-11 16:22:03.022602-0600 docExpt[1166:428702] The DocumentType type doesn't map to any NSDocumentClass.

По моему опыту, исходный код может быть в порядке, но если info.plist не установлен правильно приложение на основе документа не будет работать должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...