2009-08-27 4 views
12

J'ai une valeur BOOL dans ma définition @interface dans mon fichier .h. Ici c'est ci-dessous. Il a le même problème que ce soit un pointeur ou non.erreur: la propriété 'myBoolVariableName' avec l'attribut 'retain' doit être de type objet

@interface myCustomViewController : UIViewController <UIWebViewDelegate> { 
{ 
//...more iboutlets defined above 
BOOL *myBoolVariableName; 
} 

Quand je compile, je reçois « erreur: propriété « myBoolVariableName » avec « conserver » attribut doit être de type d'objet » sur la ligne pour l'importation de mon fichier .h.

Je trouve cette page ici d'un nombre entier/NSNumber:

http://discussions.apple.com/thread.jspa?threadID=1846927

Ainsi, il semble que je ne peux pas utiliser les valeurs booléennes dans une définition @interface. Que puis-je utiliser à la place? Que dois-je faire pour les valeurs BOOL/boolean?

Répondre

33

Je devine que plus tard dans votre interface que vous avez quelque chose comme ceci:

@property (retain) BOOL *myBoolVariableName; 

Cela signifie faire une propriété qui est la valeur est un pointeur sur une BOOL et retain sémantique.

Votre problème est que BOOL * est un pointeur vers un octet de mémoire, pas un pointeur vers un objet. Et retenir est quelque chose qui ne s'applique qu'aux objets.

Voici comment vous pouvez créer une propriété BOOL.

@interface myCustomViewController : UIViewController <UIWebViewDelegate> { 
    BOOL myBoolVariableName; 
} 

@property myBoolVariableName; 

@end 

Les différences importantes sont que la variable est déclarée comme « BOOL », et non « BOOL * » et la propriété ne dispose pas (conserver).

+4

Je devais le faire comme ça, mais sinon tu es mort à droite. :) Je vous remercie. @property BOOL myBoolVariableName; – Neo42

+0

Cela s'appliquera également aux entiers –

1

J'ai fait face à une situation similaire. Je l'ai résolu comme,

@interface myCustomViewController : UIViewController { 
BOOL myBoolVariableName; 
} 
@property BOOL myBoolVariableName; 
@end 

Je renvoie une réponse de Jon Hess mais j'ai une erreur. Le nom de type requiert un spécificateur ou un qualificateur. Ma version précédente était,

@property myBoolVariableName; 

J'ajouté BOOL et résolu la question.