2011-01-04 13 views
0

私のブールが== YESかどうかをチェックするのに、実際には入力しない単純なコードがいくつかあります。シンプルなブールに問題がある

NSLog(@"boool %d",self.arrayAlreadyPopulated); 

if (self.arrayAlreadyPopulated == YES) 
{ 
Match *aMatch = [appDelegate.matchScoresArray objectAtIndex:(numMatchCounter)]; 
aMatch.teamName1 = TeamNameHolder; 
} 
else 
{ 

Match *aMatch = [[Match alloc] init]; 
aMatch.teamName1 = TeamNameHolder; 
    [appDelegate.matchScoresArray addObject:aMatch]; 
[aMatch release]; 
} 

上のデバッグでは、2番目のパスでself.arrayAlreadyPopulatedの値が1である必要があります。

しかし、それは決して最初の最初の部分に入りませんが、私は問題が何であるか、私の人生のために参照カント

「他」にダウンジャンプします。 -.-

誰かが私を手がかりにすることができますか?

おかげ -code

EDIT宣言コード

BOOL arrayAlreadyPopulated; 
@property (nonatomic) BOOL arrayAlreadyPopulated; 

@synthesize arrayAlreadyPopulated; 
+1

'arrayAlreadyPopulated'はどのように宣言されていますか?コードを貼り付けることはできますか? –

+0

@Mikeはあなたが要求したコードに追加されました。 –

+0

なぜintですか? BOOLは '(assign)'でうまく動作するはずです。 –

答えて

2

YESまたはNOと比較しないでください。彼らはNOではなく、YESと等価ではない値を運ぶことができます。その代わり、if書に直接ブール式を使用:あなたはself.arrayAlreadyPopulated = YESだけではなくarrayAlreadyPopulated = YESとして常にarrayAlreadyPopulatedに値を代入している

if (self.arrayAlreadyPopulated) 
{ 
    // ... 
} 
+0

あなたの事例の裏には何が起こっていますか?条件付きチェックが効果的に 'if(self。arrayAlreadyPopulated!= NO)'という意味ですか? –

+0

いいえ、 'self.arrayAlreadyPopulated!= NO'はコンパイラによってブール値(値 '1'または '0'のint)に変換され、それがチェックされます。言い換えれば、それは冗長です。 ;) –

+0

ああ、私は冗長部分を得る。私は結果が違うとあなたが言っていると思った。 –

1

arrayAlreadyPopulatedは実際にはおそらくBOOLではありません。たとえば、浮動小数点型の場合、%dは1を出力します。

0

チェック、ダブルチェックを。

プロパティv/sを使用すると、プロパティの関連変数が、期待通りに機能しないことがあります。 「変数」という名前のは、Appleのコード例のように[variable release]という文でメモリを解放する場合にのみとしてください。それ以外の場合はself.propertynameを使用してください。

関連する問題