2015-06-28 2 views
0

В течение последних нескольких дней я вернулся к проблеме, с которой у меня было какое-то время. Я пытаюсь интегрировать окна Cocoa в свое приложение, но [NSApplication run] не вписывается в мою модель программ, и получение пользовательских входов более сложно, чем ожидалось, поскольку окно не получает никакого события.Какао Окна, не принимающие события

Я проверил с XCode значение _currentEvent, и он постоянно nil, что заставляет меня думать, что окно не захватывает события в первую очередь. Я включил скриншот окна, когда он сфокусирован, хотя он не кажется активным, поскольку значки не окрашены. Я также включил код для создания окна в Objective-C

Примечание: Вызов [запуск приложения] работает, и я получаю входы с окном активного просмотра, когда-то вызываемым.

Обновление: я перегрузил функцию запуска и попытался дублировать то, что нашел в сборке, и получил рабочую функцию, которая обрабатывает входные данные. Единственная проблема заключается в том, что я могу вызывать только функцию внутри CreateCocoaWindow, если я вызываю функцию в CocoaWindowUpdate, даже если это одна и та же функция. Поскольку он находится в функции CreateCocoaWindow, я не могу его снова вызвать. В настоящее время я думаю, что это связано с управлением памятью Objective-C, с которым у меня мало опыта.

Источник: https://gist.github.com/Joshhua5/4c3a37a683d1cd107a18

Переменные:

Variables

Окно:

Window

+0

Я ничего не понимаю по вашей ссылке. –

+0

Извините, обновил ссылку –

+0

Почему вы ожидаете установки '_currentEvent'? Например, это может быть что-то, что '- [NSApplication run]' устанавливает после того, как оно выдает событие из очереди. Поскольку вы не вызываете этот метод, вы должны ожидать, что некоторые вещи, которые 'NSApplication' обычно делают, не будут выполнены. Я рекомендую вам попробовать использовать более традиционную архитектуру для своего приложения. При необходимости выделите основной поток на Cocoa и переместите свой другой код во вторичный поток. (У меня есть некоторый опыт с этим.) –

ответ

0

Проблема была, что моя реализация функции запуска была не вызывается из основной поток.

Смежные вопросы