Событие становится недействительным в MonoTouch - PullRequest
2 голосов
/ 12 декабря 2010

Привет пользователям Monotouch, У меня есть странная ситуация, когда у меня есть пользовательское событие, объявленное в пользовательском UIView, например:

public delegate void SelectionChangedHandler(SelectableView selectedView, bool selected);
public event SelectionChangedHandler SelectionChanged;

Затем я назначаю этот обработчик в методе инициализации viewcontroller следующим образом:

SelectableView s;
...
SelectableView.SelectionChanged += HandleSelectionChanged;

Я проверил и убедился, что все необходимые объекты все еще существуют в памяти и не были собраны в мусор.

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

EDIT: Некоторая дополнительная информация - UIView загружается из файла XIB. Я только что попытался с UIView не загружен из XIB, и все работает отлично: | Я немного ошеломлен.

РЕДАКТИРОВАТЬ 2: Еще больше информации: все свойства, установленные в UIView, загруженном из xib, также становятся нулевыми! Вот код, который я использую для загрузки UIView из xib:

var v = new SelectableView(NSBundle.MainBundle.LoadNib("SelectableView", this, null).ValueAt(0));

Затем я устанавливаю свойство v:

v.SomeProperty = s;

По времени визуализации SomeProperty имеет значение null.

Приветствие Naren

1 Ответ

1 голос
/ 06 января 2011

Я столкнулся с множеством проблем, пытаясь использовать Interface Builder, созданный UIViews.Я нашел два обходных пути: 1) вместо этого используйте UIViewController, который потребляет немного больше памяти, или 2) создайте UIView в коде (без файла xib), что несколько менее удобно, чем при использовании IB.

В большинстве случаев я выбираю первый вариант - просто знайте о количестве загруженных в настоящее время контроллеров представления.

...