调试和发布版本中BOOL变量的值不同

时间:2017-04-13 12:16:51

标签: ios objective-c iphone

我有一种方法,其中有一个条件检查bool值并根据条件执行一些任务。它在调试版本中完美运行,但在发布版本中,bool值始终返回true。

以下是在调试版和发布版中表现不同的方法的示例代码。

-(void)addNotification:(NSMutableDictionary *)dictNotificationData
{
   BOOL addNotification;

    if ([[dictNotificationData objectForKey:@"id"] integerValue] == 2) {
        if ([[dictNotificationData objectForKey:@"isActive"] boolValue]) {
            addNotification = YES;
        }
    }
    else {
        addNotification = NO;
    }

//In the release version this value always return true eventhough it is going in the else part.
   if (addNotification) { 
      //code for local notification
   }
}

如果有人知道为什么它在调试和发布版本中表现不同,请告诉我。

4 个答案:

答案 0 :(得分:1)

实际上我找到了解决方法。如果我们不提供在我的情况下创建问题的任何东西,则Bool局部变量总是初始化为垃圾值。当我初始化BOOL addNotification = NO;时,它工作正常。

在这里找到答案。 Default value of BOOL

全部谢谢。

答案 1 :(得分:0)

不是您要问的问题,但在您的代码中,可能会在初始化之前测试addNotification - 如果第二个' if'是假的。

答案 2 :(得分:0)

对于boolValue检查,请尝试此

NSNumber * isSuccessNumber = (NSNumber *)[response objectForKey: @"success"];

if([isSuccessNumber boolValue] == YES) {

}其他 {

}

答案 3 :(得分:0)

可以在设备版本上更改Boolen值。那么这一行的结果是,如果这一行返回0或1,可以改变结果。 [dictNotificationData objectForKey:@"isActive"]

例如,在32位iOS和64位iOS上运行代码。它应该在一个上正确显示“不同”,而不是另一个。

if (different(1, 2)) {
    NSLog(@"Different!");
} else {
    NSLog(@"Not different.");
}