2010-01-24 6 views
0

J'essaie d'obtenir certains iVars de mon contrôleur de vue à ma vue (une sous-vue) afin drawrect dessine une forme basée sur les entrées de l'utilisateur. Quand je code dur ces variables dans la sous-vue, la forme dessine parfait, mais quand j'utilise des getters pour accéder aux variables personnalisées du contrôleur de vue, elles reviennent nulles et le dessin est foiré. Je ne reçois aucune erreur ou avertissement. Je sais qu'il y a un problème avec le getter, des suggestions? Quelqu'un at-il un exemple de passage de variables à une sous-vue afin que cgcontext puisse être utilisé dans le drawrect? Je suis coincé gros temps. Je suppose à ce stade que mon problème est si simple, il me manque quelque chose de fondamental. Je pensais que j'avais des setters/getters emballés.uiview getter nil

+1

Il serait beaucoup plus facile de vous aider si vous avez posté le code en question. –

Répondre

0

Assurez-vous que tout ce que vous obtenez de (par exemple, le parent, ou la vue, ou quoi que vous accédiez aux getters) n'est pas nul. Essayez de définir un point d'arrêt juste avant d'y accéder et de valider que vos cibles sont valides et que les données sont valides.

+0

Je sais que les ivars sur le contrôleur ne sont pas nuls car ils sont utilisés pour définir une étiquette sur le contrôleur. Ces étiquettes sont correctes. – richieRich

+0

pouvez-vous appeler les getters du débogueur? Ces propriétés ou méthodes getter standard? –

+0

Méthodes getter standard. – richieRich

0

Nous aurions vraiment besoin de voir plus de code. Ben disait que, quelque part à votre avis, vous devez définir parent = (some code to get a reference to my parent). Assurez-vous que cela fonctionne réellement, c'est-à-dire que vous avez vraiment une référence à votre parent. Même si les ivars sont corrects, si votre parent est nul, alors envoyer [nil getSomeiVar] retournera 0 dans la plupart des cas.

Sans une meilleure compréhension du code, c'est ma conjecture. Quelque part dans votre UIViewController, vous devriez avoir quelque chose comme:

myView = //make your view 
[myView setParent:self] 

Parent est une variable de la vue, avec une propriété afin que vous puissiez y accéder

Edit: Pourquoi t-il si nous savons ce que Tu fais?

Pour setParent travailler, vous devez suivant:

  1. un Ivar YourUIViewControllerSubclass *parent; dans le .h de votre vue
  2. une propriété pour cette Ivar @property (nonatomic, retain) YourUIViewControllerSubclass *parent; dans le .h de votre point de vue
  3. Une synthèse de cette Ivar @synthesize parent; dans votre vue de l'intérieur du .m @implementation
+0

Mon application est trop simple pour poster du code. Ce sera un mort donner ce que je fais. – richieRich

+0

Il indique que la vue ne répond pas à setParent. Le viewcontroller non plus. – richieRich

+0

Est-ce que cela vous a aidé ou pouvez-vous nous donner plus d'informations pour essayer de le comprendre? –

0

Oui, vous étiez tous les deux tort, mais je pris beaucoup loin de vous me aider bien que. Je n'ai pas eu à poster de code après tout. Je devais apprendre mes compétences de débogage avec beaucoup de temps. Quelqu'un dans un autre post a mentionné les violations du MVC. J'ai dû mettre les ivars dans l'uiview, aux valeurs personnalisées de la vue CONTROLLER. En d'autres termes, je devais régler à partir du contrôleur plutôt que d'obtenir de la sous-vue.