Почему внезапно исчезает окно Xamarin.Mac?

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

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

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

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

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

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

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


person Joe Strout    schedule 09.05.2014    source источник
comment
Вы называете базу IsFlipped? Я разговариваю по телефону и не могу проверить код. Кроме того, вы отправили сообщение об ошибке в Mono или получили последнюю сборку?   -  person Millie Smith    schedule 09.05.2014
comment
Неважно, я думал, что код будет проектом   -  person Millie Smith    schedule 09.05.2014
comment
Попробуйте вернуть базу. Перевернутое && ложное хаха   -  person Millie Smith    schedule 09.05.2014
comment
Я все еще новичок в Xamarin и не понимаю, как отправить отчет об ошибке, но я отправил электронное письмо в службу поддержки по этому поводу. Если я получу от этого что-нибудь полезное, я опубликую здесь. Я сомневаюсь, что вызов base.IsFlipped поможет, но я достаточно отчаялся, чтобы попробовать что-нибудь!   -  person Joe Strout    schedule 10.05.2014
comment
Ха-ха. Я занимаюсь разработкой Xamarin уже несколько месяцев, и временами мне кажется, что ничего не получится. Я полагаю, что, возможно, в IsFlipped есть какой-то важный код, хотя в документации Apple говорится, что нужно переопределить и вернуть true, если это необходимо. false по умолчанию.   -  person Millie Smith    schedule 10.05.2014
comment
bugzilla.xamarin.com   -  person Millie Smith    schedule 10.05.2014


Ответы (1)


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

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

Снимаю шляпу перед Крисом Хамонсом из Xamarin, который сразу же ухватился за это и быстро нашел для меня проблему.

person Joe Strout    schedule 10.05.2014