Различные значения переменной BOOL в версии отладки и выпуска

У меня есть один метод, в котором есть одно условие, которое проверяет значение 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 ответа

Решение

На самом деле я нашел решение для этого. Локальная переменная Bool всегда инициализируется как значение мусора, если мы не предоставляем ничего, что создавало проблему в моем случае. Когда я инициализировал BOOL addNotification = NO; это работает отлично.

Нашел ответ здесь. Значение по умолчанию BOOL

Спасибо всем.

Значение Boolen можно изменить в зависимости от версии устройства. Так что результат для этой строки, если эта строка возвращает 0 или 1, может изменить результат. [dictNotificationData objectForKey:@"isActive"]

Например, запустите ваш код на 32-битной и 64-битной iOS. Он должен правильно отображать "Разное" на одном, но не на другом.

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

Не вопрос, который вы задаете, но в вашем коде возможно, что addNotification проверяется перед его инициализацией - если второе "если" ложно.

Для проверки boolValue, пожалуйста, попробуйте это

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

if([isSuccessNumber boolValue] == ДА) {

} еще {

}

Другие вопросы по тегам