2010-05-03 6 views
1

J'ai la ligne de code suivante dans l'une de mes méthodes Objective-C:Comparaison entre pointeur et erreur entier

if (self.rule.sunday == YES) { do some stuff... } 

La ligne produit l'avertissement du compilateur suivant:

Comparison between pointer and integer 

Il est juste un avertissement, donc ce n'est pas la vie en danger, mais ça me rend fou. Il existe clairement un concept de base sur les entiers, les pointeurs et/ou les booléens qui me manquent. Est-ce que quelqu'un peut m'éclairer pour que je puisse réparer mon code?

Comme d'habitude, merci d'avance pour votre aide.

MISE À JOUR: Pour référence, le code corrigé ressemble à ceci:

if ([self.rule.sunday boolValue] == YES) { do some stuf... } 
+2

'self.rule.sunday' est-il un pointeur? –

+0

Si c'est le cas, cela indique que quelque chose est horriblement mauvais dans la conception. Peut-être dans la mise en œuvre aussi. –

Répondre

2

self.rule.sunday est de retour une référence d'objet. YES n'est pas un objet, c'est un unsigned char. Vous comparez donc une référence d'objet (c'est-à-dire une adresse mémoire) à 1. Bien sûr, ça va se plaindre chez vous.

+0

Ok ... mais si l'objet auquel il est fait référence est un booléen, comment êtes-vous censé comparer par rapport à cela à des fins de prise de décision? La construction pour laquelle je suis en train de tourner est: "Si l'attribut booléen 'dimanche' de l'entité Rule appelée 'rule' est 'yes' alors faites quelques trucs." – Andy

+0

@Andy il n'y a pas d'objet booléen (sauf si vous en avez créé un). BOOLs sont généralement enveloppés dans des objets 'NSNumber', donc dans ce cas vous utiliseriez' -boolValue' pour extraire le 'BOOL'. Mais une meilleure question est: comment déclarez-vous la propriété 'sunday' sur le type' rule'? –

+0

J'utilise Core Data pour gérer les objets; l'attribut "dimanche" est marqué comme un "booléen". Pendant que j'attendais, je suis tombé sur la référence NSNumber Class et les méthodes -boolValue et + numberWithBool. Substituer ceux sur les lignes en question a pris soin de tous les avertissements du compilateur, et a éliminé un autre bug que je n'avais même pas encore commencé à travailler. Merci pour la poussée dans la bonne direction, Dave. – Andy

Questions connexes