2016-06-27 17 views
0

BOOLを含むNSMutableArrayがあります。次のように私はその配列ウォークスルーNSMutableArrayのBOOLが間違った答えを返します

addObject:@[@YES, sectionInfo.header, myFeedSource.header 

:要素が経由して追加され

for (int i=0; i<revealController.headersSelected.count; i++) { 
     isActive = [revealController.headersSelected[i][0] boolValue]; 
     MLog(@"Active %@",revealController.headersSelected[i][0]); 
     MLog(@"class %@",[revealController.headersSelected[i][0] class]); 
     MLog(@"converted %d",[revealController.headersSelected[i][0] boolValue]); 
     if (isActive) { 
      MLog(@"Yes"); 
     }else { 
      MLog(@"No"); 
     } 
     if (revealController.headersSelected[i][0]) { 
      MLog(@"Yes"); 
     }else { 
      MLog(@"No"); 
     } 
     if (revealController.headersSelected[i][0]>0) { 
      MLog(@"Yes"); 
     }else { 
      MLog(@"No"); 
     } 

出力は次のようになります。

Active 0 
class __NSCFBoolean 
converted 0 
No 
Yes 
Yes 

私はそれが正しいを見ることができる唯一の方法サブ要素の値は、次のようにvarに変換することです:

 isActive = [revealController.headersSelected[i][0] boolValue]; 
このBOOLの

値はreplaceObjectAtIndex経由For..Nextループの内側に設定されている:

私はここで何をしないのですか?なぜBOOLの正しい値が表示されないのですか?私は、前と後に1からあなたの出力に0

答えて

2

コメントへの値の変更、アレイ全体をプリントアウトしてきました

:だから

Active 0    This is truth 
class __NSCFBoolean This is truth 
converted 0   This is truth 
No     This is truth 
Yes  This is a lie, because you're testing for pointer existence 
Yes  This is a lie, because you're testing the pointer isn't a zero 

を、私はあなたが編集していると思うだろうコピーであることがあり、それをデータ構造に更新しないもの、および/またはインスタンスの開梱に注意する必要があります。

+0

これは 'うそ'ではなく、実行されている比較に基づいて正しい出力です。比較はちょっとOP *が思う/したいことをしていない* - あなたが説明した – Paulw11

+0

公正な点、それは偽りではなく誤解を招くYESであるという印刷です – Wain

1

オブジェクトは、BOOLのような組み込み型ではなく、NSArrayにしか格納できません。 @YESは、[NSNumber numberWithBool:YES]という簡潔な表現です。つまり、必要なブール値を持つNSNumberオブジェクトを作成しています。

NSNumberはクラスクラスタなので、値を格納する適切なサブクラスを選択します。この場合、それはNSCFBooleanです。ブール値にアクセスするには、図のようにboolValueメソッドを使用する必要があります。

+0

OK、 > 0 '作品ですか? @YESのためにNSNumberではありませんか?さて、待ってください。 > 0のオブジェクトへのポインタをチェックしていました。私は何を変えなければならないかのように見える。 – KarlJay

+0

正しいです。 @Wainはあなたが実際にやっていることを彼の答えで説明します – Paulw11

関連する問題