2010-12-12 34 views
2

utilisateurs Salut MonoTouch, j'ai cette situation étrange où j'ai un événement personnalisé déclaré dans un UIView personnalisé comme ceci:événement devient nul dans MonoTouch

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

J'assignez ensuite à ce gestionnaire dans la méthode initialize un viewcontroller comme ceci:

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

J'ai vérifié et veillé à ce que tous les objets nécessaires existent encore en mémoire et ne sont pas les déchets ramassés.

Je constate que l'événement devient nul entre l'affectation et le dessin. Est-ce que quelqu'un a déjà rencontré ce problème? Ou est-ce que je fais quelque chose de manifestement faux dans mon utilisation des événements dans MonoTouch?

EDIT: Informations supplémentaires - UIView est chargé à partir d'un fichier xib. Je viens d'essayer avec un UIView non chargé depuis un xib et tout fonctionne bien: | Je suis un peu abasourdi.

EDIT 2: Encore plus d'informations: Toutes les propriétés définies sur le UIView chargé de la xib semble devenir nulle aussi bien! Voici le code que j'utilise pour charger le UIView du xib:

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

Je puis définir une propriété sur v:

v.SomeProperty = s; 

En temps de rendu SomeProperty est nul.

Vive Naren

+0

Définissez-vous/accédez-vous à la propriété à partir de différents threads? – kwcto

Répondre

1

je suis tombé sur beaucoup de problèmes en essayant d'utiliser Interface Builder créé UIViews. J'ai trouvé deux solutions de contournement: 1) Utiliser un UIViewController à la place, qui utilise un peu plus de mémoire, ou 2) Créer l'UIView dans le code (pas de fichier xib), ce qui est moins confortable qu'avec IB.

Je finis par utiliser la première option la plupart du temps - il suffit de connaître le nombre de contrôleurs de vue actuellement chargés.

+0

Ouais. C'est ce que j'ai fini par faire. Merçi pour la confirmation :) – Naren