if 语句比较在目标 c 中不起作用的整数
Posted
技术标签:
【中文标题】if 语句比较在目标 c 中不起作用的整数【英文标题】:if statement comparing integers not working in objective c 【发布时间】:2012-07-13 13:40:52 【问题描述】:我正在尝试根据两个整数的值执行逻辑。在这里我定义了我的整数,我也有 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 整数。
【问题讨论】:
如果theNewHikeFlag
是 NSArray
那些存储在那里的东西是 NSObject*
s 你不应该将它们转换为基本数据类型。如果它们存储为NSNumber*
s,则将它们转换为这样,然后取intValue
你能告诉我你在运行所有可能的测试用例时得到的日志输出吗?当你(int)投射 theNewHikeFlag 中的任何内容时,我感觉发生了一些奇怪的事情
【参考方案1】:
由于您无法将int
s 存储在数组中,因此该行
(int)[theNewHikeFlag objectAtIndex:(theID-1)];
没有做你认为应该做的事。您需要从NSNumber
中提取数据,而不是转换为int
。
int theHikeFlag = [[theNewHikeFlag objectAtIndex:(theID-1)] intValue];
日志输出正确的原因有点搞笑:你连续犯了两个错误!首先,您将指针重新解释为int
,然后通过添加与%@
不兼容的格式说明符%@
,让NSLog
再次将其重新解释为对象,但与int
不兼容,但可以正常使用指针!由于int
值包含指向NSNumber
的指针,因此NSLog
会产生“正确”的输出。
【讨论】:
不错的解决方案!谢谢你。我尝试将值转换为 (NSInteger)、(int) 甚至 (BOOL);他们都没有工作。以上是关于if 语句比较在目标 c 中不起作用的整数的主要内容,如果未能解决你的问题,请参考以下文章