NSDocument с несколькими окнами - диалоговые листы Appkit переходят в неправильное окно - PullRequest
0 голосов
/ 29 мая 2018

Он используется редко, но документация Apple по NSDocument описывает, как настроить NSDocument с несколькими окнами для одного документа.Я работаю над приложением базы данных, которое делает это.Вот пример документа базы данных чековой книжки с двумя открытыми окнами.Каждое окно показывает различный вид документа, в данном случае электронную таблицу, похожую на вид сзади, и диаграмму, обобщающую этот набор данных в переднем окне.В этом примере показаны два окна для одного документа, но пользователь может создать столько окон для каждого документа, сколько ему нужно, каждое из которых отображает один и тот же базовый документ по-своему.

enter image description here

Все работает нормально, за исключением , что, если системный диалоговый лист открывается (Сохранить как, Печать, Настройка страницы), большую часть времени (но не каждые время)диалоговое окно переходит к другому окну и присоединяется к этому окну вместо текущего окна, как показано в этом фильме.

enter image description here

Обратите внимание, что хотя диалоговое окнолист прикрепляется к окну, содержащему диаграмму, он правильно печатает содержимое в окне электронной таблицы.Если я нажму Печать , будет напечатано правильное содержимое.

Для печати все, что делает наш код, это вызывает NSDocument printDocument: метод.

[NSApplication sendActionToFirstResponder:@selector(printDocument:)];

Page Setupкод также просто вызывает NSDocument.

[NSApplication sendActionToFirstResponder:@selector(runPageLayout:)];

Наш код не настраивает ни один из этих диалоговых листов, они полностью готовы.

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

Эта проблема появляется во всех версиях macOS, поддерживаемых нашим приложением, начиная с 10.9 и выше.10,13.Возможно, это ошибка AppKit, которую редко можно увидеть из-за того, что несколько окон с одним документом используются так редко?

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

Для справки: # 221 в системе отслеживания проблем Panorama X.

1 Ответ

0 голосов
/ 29 мая 2018

Реализация / переопределение NSDocument свойство windowForSheet.

Значение этого свойства может быть равно нулю, и в этом случае отправитель должен представить модальную панель приложения.Реализация этого свойства в NSDocument устанавливает значение окна первого оконного контроллера или [NSApp mainWindow], если нет оконных контроллеров или если первый оконный контроллер не имеет окна.

...