Objective c 比较整数在目标c中不起作用的if语句

Objective c 比较整数在目标c中不起作用的if语句,objective-c,xcode,xcode4.3,Objective C,Xcode,Xcode4.3,我试图根据两个整数的值执行逻辑。这里我定义了我的整数,还有NSLog,这样我可以在运行代码时查看这些值是否正确: int theHikeFlag = (int)[theNewHikeFlag objectAtIndex:(theID-1)]; NSLog(@"theHikeFlag: %@",theHikeFlag); int fromTheDB = [self.detailItem hikeFlag]; NSLog(@"fromTheDB: %d",fromTheDB); 逻辑是这样的: i

我试图根据两个整数的值执行逻辑。这里我定义了我的整数,还有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";
    }
}

作为此代码如何工作的示例。当HIKEFLAG=1和
fromTheDB=0
时,代码绕过if和else if,直接进入else并设置
hikeString=“您没有”
。这意味着我的结果与HIKEFLAG无关,并且基于fromTheDB整数。

由于不能在数组中存储
int
s,因此

(int)[theNewHikeFlag objectAtIndex:(theID-1)];
没有做你认为应该做的事。您需要从
NSNumber
中提取数据,而不是转换为
int

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

日志输出正确的原因有点可笑:您连续犯了两个错误!首先,将指针重新解释为
int
,然后通过添加一个与
int
不兼容的格式说明符
%@
,让
NSLog
再次将其解释为一个对象,但可以很好地处理指针!由于
int
值包含一个指向
NSNumber
的指针,
NSLog
生成“正确”的输出。

如果
newwhikeFlag
NSArray
中存储的那些东西是
NSObject*
的,则不应将它们转换为基本数据类型。如果它们存储为
NSNumber*
s,则将它们转换为该类型,然后获取
intValue
运行所有可能的测试用例时,您能向我显示您获得的日志输出吗?我有一种感觉,当你(int)在NewWhikeFlagNice解决方案中施放任何东西时,奇怪的事情正在发生!非常感谢。我尝试将值转换为(NSInteger)、(int)和偶数(BOOL);他们中没有人工作。