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

lem*_*ist 2 xcode objective-c xcode4.3

我试图根据两个整数的值执行逻辑.这里我定义了我的整数,我也有NSLog,所以当我运行代码时,我可以看到值是否正确:

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

这是逻辑:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

作为此代码如何工作的示例.当theHikeFlag=1fromTheDB=0,代码绕过if和else if并直接进入else并设置hikeString="You have not".这意味着我的结果与theHikeFlag无关,并且基于fromTheDB整数.

das*_*ght 5

由于你不能将ints 存储在数组中,所以行

(int)[theNewHikeFlag objectAtIndex:(theID-1)];
Run Code Online (Sandbox Code Playgroud)

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

int theHikeFlag = [[theNewHikeFlag objectAtIndex:(theID-1)] intValue];
Run Code Online (Sandbox Code Playgroud)

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