2009-07-20 4 views
2

J'ai une classe, et dans l'en-tête je définis ceci:Comment accéder à une propriété de type BOOL?

@interface MyViewController : UIViewController { 
    BOOL blackBackground; 
} 
@property(nonatomic, assign) BOOL blackBackground; 

Dans la mise en œuvre, j'ai le @synthesize pour blackbackground.

Ensuite, j'instancier cet objet et faire:

[myViewController setBlackBackground:YES]; 

maintenant que booléen doit avoir la valeur OUI (ou vrai)). Mais, je vérifie:

if ([myViewController blackBackground]) { 
    NSLog(@"yep, it's true"); 
} 

cependant, il ne semble pas répondre ou retourner quoi que ce soit, que ce soit la valeur ne soit pas définie ou je ne peux pas appeler/vérifier. Une idée de ce qui ne va pas?

Répondre

16

Etes-vous sûr que vous utilisez réellement le code ci-dessus? Il a des erreurs de syntaxe et ne compilera pas, il est donc tout à fait possible que vous ne voyiez pas ce code exécuté parce que vous exécutez d'anciennes copies du code.

Le problème selon lequel vous ne pouvez pas déclarer une propriété scalaire comme ayant une sorte de conservation, d'affectation, de copie sémantique entraîne une erreur de compilation. Vous devez changer:

@property(nonatomic, assign) BOOL blackBackground; 

à

@property(nonatomic) BOOL blackBackground; 
+0

en fait, il était une faute de frappe stupide dans mon code! Merci! Chose étrange, je l'ai eu à travailler avec @property (nonatomic, assign). Quelle est la différence quand je ne fournis pas assigner ou conserver (juste rien)? Comment se présentent les accesseurs créés? – Thanks

+3

retenir signifie que lorsque vous définissez la propriété que vous définissez sur l'objet réel (de sorte que votre objet verra les mutations qui se produisent), et bump le nombre de retenue. Copier signifie que vous définissez la propriété sur une copie de l'objet transmis. Affecter signifie que vous effectuez une affectation directe (comme dans la retenue) sans augmenter le retainCount. Puisque les valeurs scalaires n'acceptent pas les messages ou ne participent pas à la conservation/diffusion d'ObjC, ces attributs ne leur sont pas applicables. –

+0

Vous ne savez pas si tout est correct: "Vous utilisez généralement cet attribut pour les types scalaires tels que NSInteger et CGRect ou (dans un environnement compté par référence) pour les objets que vous ne possédez pas, tels que les délégués." – typeoneerror

1

Je pense qu'il est isBlackBackground ou bien sûr vous pouvez utiliser self.blackBackground

+0

sens si (myViewController.blackBackground) {... – jcb

1

Je suis d'accord avec @Louis Gerbarg et croire que vous aviez une faute de frappe, ou tout simplement ancienne version construite du code, mais je suis en désaccord avec lui sur la raison pour laquelle il fournies pour votre erreur: Il a écrit:

The issue that you cannot declare a scalar property to have a any sort of retain,assign,copy semantic, it will result in a compile error. You should change:

@property(nonatomic, assign) BOOL blackBackground;

to

@property(nonatomic) BOOL blackBackground;

et selon docs est le lien ci-joint et Apple:

@property (nonatomic, assign) BOOL blackBackground; 

Et:

@property (nonatomic) BOOL blackBackground; 

sont les mêmes, puisque "attribuer" est le comportement par défaut pour les propriétés.

(droit?)

previous similar stackOverflow question and answer