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

【问题讨论】:

如果 theNewHikeFlagNSArray 那些存储在那里的东西是 NSObject*s 你不应该将它们转换为基本数据类型。如果它们存储为NSNumber*s,则将它们转换为这样,然后取intValue 你能告诉我你在运行所有可能的测试用例时得到的日志输出吗?当你(int)投射 theNewHikeFlag 中的任何内容时,我感觉发生了一些奇怪的事情 【参考方案1】:

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

(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 中不起作用的整数的主要内容,如果未能解决你的问题,请参考以下文章

remaining()在if语句C ++中不起作用

fillOval() 在 if 语句中不起作用[关闭]

基本的 If else 语句在 javascript 中不起作用

else 在 if 语句中不起作用

jQuery if 语句在 for 循环中不起作用

Liquid - if contains 语句在 for 循环中不起作用