我试图根据两个整数的值执行逻辑。这里我定义了我的整数,我也有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=1
和fromTheDB=0
时,代码会绕过if和else if并直接转到else并设置hikeString="You have not"
。这意味着我的结果与theHikeFlag无关,并且基于fromTheDB整数。
答案 0 :(得分:5)
由于您无法将int
存储在数组中,因此行
(int)[theNewHikeFlag objectAtIndex:(theID-1)];
没有做你认为应该做的事情。您需要从NSNumber
提取数据,而不是转化为int
。
int theHikeFlag = [[theNewHikeFlag objectAtIndex:(theID-1)] intValue];
日志输出正确的原因有点滑稽:你连续犯了两个错误!首先,您将指针重新解释为int
,然后通过添加与{{1不兼容的格式说明符NSLog
让%@
再次将其重新解释为对象但是,但指针工作正常!由于int
值包含指向int
的指针,NSNumber
会生成“正确”的输出。