Интерфейс приложения Cocoa случайно «отключается» от программного кода - PullRequest
1 голос
/ 19 октября 2010

У меня есть многопоточное приложение Какао, которое обрабатывает изображения.В программе есть индикатор выполнения и текст, показывающий, насколько далеко продвинулся процесс.Это все прекрасно работает.Однако иногда интерфейс просто зависает, и все перестает обновляться.Индикатор выполнения перестает двигаться, а текст перестает обновляться в процентном счетчике.Тем не менее, фактический процесс все еще работает!У меня есть NSBeep (), который запускается, когда программа завершена, и я все еще слышу это, хотя пользовательский интерфейс больше не обновляется.Как будто пользовательский интерфейс просто отключается от кода.

Другая странная проблема заключается в том, что иногда NSOpenPanel, который открывается, когда пользователь хочет выбрать файл, просто становится белой пустотой.Я объявил NSOpenPanel (я использую [NSOpenPanel openPanel]) в главном потоке, что помогает (сначала я пытался сохранить его, но это не сработало).Я не знаю, связано ли это с этим, но любые идеи приветствуются!

Я использую Xcode 3.1.1 (GCC 4.2) в Mac OS X 10.5.8.

1 Ответ

4 голосов
/ 19 октября 2010

Вы пытаетесь манипулировать пользовательским интерфейсом из других потоков.Как указано в документации, AppKit, как правило, не является поточно-ориентированным, и вам следует взаимодействовать с вашим графическим интерфейсом в основном потоке.См. -performSelectorOnMainThread: withObject: waitUntilDone: .

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