2

2 つの整数の値に基づいてロジックを実行しようとしています。ここでは整数を定義しています。また NSLog もあるので、コードを実行したときに値が正しいかどうかを確認できます。

int theHikeFlag = (int)[theNewHikeFlag objectAtIndex:(theID-1)];
NSLog(@"theHikeFlag: %@",theHikeFlag);
int fromTheDB = [self.detailItem hikeFlag];
NSLog(@"fromTheDB: %d",fromTheDB);

そして、ここにロジックがあります:

if (theHikeFlag==1) {
    hikeString=@"You have";
}
else if (theHikeFlag==0) {
    hikeString=@"You have not";
}
else {
    if (fromTheDB==1) {
        hikeString=@"You have";
    }
    else {
        hikeString=@"You have not";
    }
}

このコードがどのように機能するかの例として。theHikeFlag=1andの場合fromTheDB=0、コードは if と else if をバイパスし、else と sets に直接進みますhikeString="You have not"。これは、私の結果が theHikeFlag とは無関係であり、fromTheDB 整数に基づいていることを意味します。

4

1 に答える 1

5

ints を配列に格納することはできないため、次の行

(int)[theNewHikeFlag objectAtIndex:(theID-1)];

あなたがすべきだと思うことをしていません。NSNumberにキャストするのではなく、からデータをプルする必要がありますint

int theHikeFlag = [[theNewHikeFlag objectAtIndex:(theID-1)] intValue];

ログ出力が正しい理由は、ちょっとおかしな話です: 2 回連続で間違いを犯したのです! 最初に、ポインタを として再解釈しint、次にと互換性のないNSLog書式指定子を追加することで、再びオブジェクトとして再解釈させましたが、ポインタでは問題なく動作します! 値には へのポインターが含まれているため、「正しい」出力が生成されます。%@intintNSNumberNSLog

于 2012-07-13T13:44:07.133 に答える