2010-10-26 5 views
3

Je l'ai avant la déclaration d'interface dans mon en-tête MainView.h.Paramètre de définition de code et accès

typedef enum { UNKNOWN, CLEAR, NIGHT_CLEAR, CLOUDY, NIGHT_CLOUDY } Weather; 

Je déclare comme ceci:

Weather weather; 

a ensuite fait un accesseur:

@property Weather weather; 

Et il synthétisé.

Ma question est, comment puis-je utiliser cela dans une classe différente sans qu'il plantage? J'ai importé l'en-tête pour MainView. J'ai essayé de l'utiliser comme ceci:

MainView* myView = (MainView*)self.view; 

[myView setWeather: CLEAR]; 

Il ne me jette pas des erreurs dans Xcode, mais il se bloque lorsque le code est exécuté, en disant:

-[UIView setWeather:]: unrecognized selector sent to instance *blah* 

que je fais quelque chose de mal ici?

+0

Vérification Météo, qui ressemble à un type ici, prolly ne fonctionnera pas. Besoin de vérifier l'instance? – brumScouse

+0

Merci de votre réponse. Comment vérifier l'instance? –

+1

En C, vous devez créer une variable de type Météo comme ceci: Weather todaysWeather; - todaysWeather est la variable/l'instance de Weather et serait vérifiée ainsi: if (todaysWeather == Weather.CLEAR) .... – brumScouse

Répondre

6

est un type pas une variable.

, vous voulez quelque chose comme ceci:

Weather theWeather = [mainView weather]; 
if (theWeather == CLEAR) 
{ 
<do something> 
} 

Où MainView a Ivar:

Weather weather; 
+0

C'était la bonne façon de le faire, mais en le déclarant je ne l'ai pas fait comme vous l'avez écrit (même si je suis sûr que cela fonctionnerait), mais je l'ai plutôt mis dans mon interface et ensuite en ai fait une propriété. Ensuite, je pourrais l'utiliser comme une variable. –

+0

Comment accéder à la variable 'weather' en dehors de ma classe? –

+1

En général, je définis enums et #defines dans un fichier .h qui est ensuite inclus dans tous mes autres fichiers .h. Bien sûr, il y a des exceptions. Cela dit, votre propriété 'weather' devrait être accessible via getter/setter depuis n'importe quel endroit ayant accès à une instance de votre classe. Cela dit, la capitalisation de 'MainView' dans votre exemple de code me préoccupe; c'est le nom de votre classe. Une instance de MainView devrait s'appeler quelque chose d'autre, comme mainView. De plus, il y a de fortes chances que le «temps» soit stocké ailleurs que dans MainView, mais ce n'est ni ici ni là. – westsider

1

Vous devez supprimer le * dans Weather* weather. weather doit être un entier, pas un pointeur.

+0

C'était précisément le problème dans ma déclaration. –

Questions connexes