Странное поведение с дополнительными представлениями на NSSavePanel и NSOpenPanel в изолированном приложении

У меня проблема с дополнительными представлениями на NSSavePanel и NSOpenPanel.

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

Я использую этот код, чтобы показать панель:

[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];

Это происходит только тогда, когда приложение-песочница включена.

После долгих испытаний я обнаружил, что происходит то, что вид был неуместен (не прикреплен к панели).

Когда я открываю Mission Control и перемещаю указатель мыши по окнам приложения, я заметил, что «невидимое» окно выделено, и когда я выбираю его, я могу управлять вспомогательным представлением (все элементы управления работают), но оно кажется отделенным от панели открытия или сохранения. как показано на скриншоте.

Снимок экрана

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

Любой намек на то, что я могу делать неправильно?

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

Изменить

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

Обновление 1

Я подклассифицировал вид, который используется как вспомогательный вид, и заметил, что

- (void)viewWillMoveToSuperview:(NSView *)newSuperview

называется, но

- (void)viewDidMoveToSuperview

никогда не вызывается, даже если представление отображается правильно, это нормальное поведение?

Обновление 2

Я подтвердил, что следует вызывать - (void)viewDidMoveToSuperview, в тестовом приложении вызываются оба метода.

Я также заметил небольшую разницу между моим приложением и тестовым приложением. В моем приложении панель просто скользит вниз, но в тестовом приложении панель «откидывается вниз» (не знаю, как именно это описать). То, как выглядит панель, для меня не имеет значения, я просто заметил, что она не отображается так же.


person Bruno Ferreira    schedule 16.07.2012    source источник


Ответы (1)


Перепробовав множество вещей, я пришел к выводу, что проблема связана с настройками ARC (автоматического подсчета ссылок) для проекта.

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

person Bruno Ferreira    schedule 21.07.2012