Основываясь на комментариях выше, казалось бы, эта проблема связана с деталями Powerbox. Чтобы объяснить далее: мое приложение изолировано и вызывает NSOpenPanel. При разрыве (точка останова Xcode) в блоке завершения NSOpenPanel я испытываю системные потери ввода клавиатуры.
Запись клавиатуры ведет себя нормально в точках останова вне вызова NSOpenPanel. Проработав за этой областью кода, я заметил, что мои последующие операции (поставленные в фоновом режиме от завершающего бока) часто заканчиваются до того, как NSOpenPanel полностью разорван (исчезает с экрана). Мое предположение заключается в том, что до тех пор, пока NSOpenPanel не будет удален с экрана (и, возможно, после этого), Powerbox не освободит управление клавиатурой.
Значительная часть этого предположения, так как у меня нет фактического кода Powerbox и вы не можете войти в него, но, похоже, он подходит.
Я работал над своими проблемами отладки, используя инструкции печати и перешагнув код с открытым инспектором переменных. Вход мыши продолжает функционировать, поэтому вы можете щелкнуть правой кнопкой мыши (если у вас есть двухкнопочная мышь) в переменной и напечатать ее описание как минимум.
Спасибо за помощь. Кен.
UPDATE Я теперь задерживая выполнение любого из моих действий после NSOpenPanel использованием dispatch_after. В моей системе задержка в 1 секунду делает трюк. Мне действительно не нравится добавлять произвольные задержки, но это, похоже, работает.
В вашем приложении используется крант или что-то в этом роде? –
Нет, но я проследил это немного дальше. Я пытаюсь отлаживать действие, вызванное событием меню. Отладчик работает так, как ожидалось, когда срабатывает действие меню, но мое действие открывает NSOpenPanel с использованием beginWithCompletionHandler: - как только я пытаюсь сломать обработчик завершения, я не могу использовать клавиатуру (общесистемную). Все вызовы, вызванные этим обработчиком, выглядят одинаково. Вне этого отладчик ведет себя как ожидалось (как и все другие приложения). – greg
Является ли ваше приложение изолированным? Если это так, открытая панель запускается с помощью Powerbox, а не вашего приложения. Не знаете, как это может взаимодействовать. –