if语句比较整数不符合目标c

时间:2012-07-13 13:40:53

标签: objective-c xcode xcode4.3

我试图根据两个整数的值执行逻辑。这里我定义了我的整数,我也有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=1fromTheDB=0时,代码会绕过if和else if并直接转到else并设置hikeString="You have not"。这意味着我的结果与theHikeFlag无关,并且基于fromTheDB整数。

1 个答案:

答案 0 :(得分:5)

由于您无法将int存储在数组中,因此行

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

没有做你认为应该做的事情。您需要从NSNumber提取数据,而不是转化为int

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

日志输出正确的原因有点滑稽:你连续犯了两个错误!首先,您将指针重新解释为int,然后通过添加与{{1不兼容的格式说明符NSLog%@再次将其重新解释为对象但是,但指针工作正常!由于int值包含指向int的指针,NSNumber会生成“正确”的输出。