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=1andfromTheDB=0时,代码绕过 if 和 else if 并直接进入 else 和集合hikeString="You have not"。这意味着我的结果与 HikeFlag 无关,并且基于 fromTheDB 整数。

4

1 回答 1

5

由于您不能将ints 存储在数组中,因此该行

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

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

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

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

于 2012-07-13T13:44:07.133 回答