Избыточный выпуск, из-за которого окно немеет

Я использую Xcode 4.2 для написания и Clang 3.0 для создания программы, демонстрирующей конкретный сбой.

В программе есть окно, которое она означает, чтобы поддерживать, которое в пике установлено на «Освобождать при закрытии», поэтому при последующих использованиях оно не используется. Это должен быть лист, поэтому он показан с использованием beginSheet: modalForWindow: modalDelegate: didEndSelector: contextInfo: . Попытка показать окно второй или третий раз должна привести к сбою приложения.

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

Это то, что я хочу (эта программа является частью презентации, демонстрирующей методы отладки), но сейчас это не то, что происходит. Теперь программа не вылетает; Инструменты показывают, что счетчик удержания в окне дважды снижается до 1, но не ниже, поэтому он не освобождается.

Было бы хорошо, если бы проблема остановилась на этом; Я мог бы просто спрятать и показать лист еще раз или два. Проблема в том, что во второй раз, когда я поднимаю лист (должен-быть-мертв-но-еще-есть-хотя бы один-сохранить-поддерживать-живым), он онемел.

Под этим я подразумеваю, что ни лист, ни какой-либо элемент управления в нем (он содержит поле, текстовое представление и две кнопки) не реагируют на события. Сердцебиение в этом ничего не делает; в окне есть кнопка ОК, но когда окно онемел, кнопка ОК не пульсирует. Ничего не получается закрыть лист.

Но программа не вылетела. Я все еще могу взаимодействовать с меню, и док показывает, что программа отвечает. Если я попытаюсь выйти из него, он издаст звуковой сигнал, так как лист поднят.

Что вызывает онемение окна и что я могу с этим поделать?

Вот сокращенная версия программы, в которой также проявляется проблема: https://github.com/boredzo/NumbWindow

6
задан Peter Hosey 20 October 2011 в 04:47
поделиться