2014-05-09 5 views
0

Я недавно posted об ошибке в MonoMac, в которой окно внезапно исчезнет после нажатия на кнопку 20 раз или около того. Эта ошибка, как оказалось, не влияет на Xamarin.Mac, поэтому я переключил свой проект на это.Почему окно Xamarin.Mac внезапно исчезает?

Но теперь я вижу практически ту же ошибку в другом контексте: после ввода нескольких строк текста в NSTextField окно исчезает точно так же. Нет ошибки, нет исключения; он просто исчезает. Пуф, ушел!

Я воспроизвел это в тривиальном проекте: вы можете увидеть его сами, создав новый пустой проект Xamarin.Mac, добавив this code в новый файл и запустив его. Затем немного смять клавиатуру. После 5 или 6 строк окно исчезает.

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

Любопытно, что это похоже, происходит только тогда, когда поле находится внутри подкласса NSView, где IsFlipped был переопределен. Но не имеет значения, возвращает ли IsFlipped true или false - если метод вообще существует, возникает ошибка; если прокомментировать, ошибка не возникает.

Итак: Кто-нибудь еще сталкивался с подобной ошибкой в ​​Xamarin.Mac? Возможно, в других контекстах, которые дадут нам больше информации о первопричине? Какие-нибудь советы по отладке для новичка Xamarin?

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

+0

Вы называете базу IsFlipped? Я нахожусь на своем телефоне и не могу проверить код. Кроме того, вы отправили ошибку Mono или получили последнюю сборку? –

+0

Nevermind Я думал, что код будет проектом –

+0

Попробуйте «return base.IsFlipped && false» haha ​​ –

ответ

2

ОК, то получается, что это ISN» t ошибка в Xamarin.Mac вообще, но в моем коде. Поскольку я не сохранял ссылку на объект NSWindow, он вышел из сферы действия, и как только сборщик мусора обойдет его, он будет удален и окно GUI будет снесено.

Все, что нам нужно сделать, это сохранить ссылку на окно (например, в классе AppDelegate), и проблема исчезнет.

Шляпы к Крису Хэмонсу на Xamarin, который прыгнул прямо на это и быстро нашел проблему для меня.

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