Различные значения переменной 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] == ДА) {
} еще {
}