2017-04-13 77 views
1

我有一種方法,其中有一個條件檢查布爾值並根據條件執行一些任務。它在調試版本中完美工作,但在發佈版本中,bool值始終返回true。調試和發佈版本中BOOL變量的不同值

以下是在調試版本和發行版本中行爲不同的方法的示例代碼。

-(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 
    } 
} 

請讓我知道如果任何人有關於它爲什麼在調試和發行版本不同的行爲任何想法。

+0

你能解釋一下你的問題嗎?它仍然需要更多的信息。 – Wos

+1

'if([[dictNotificationData objectForKey:@「id」] integerValue] == 2){[dictNotificationData objectForKey:@「isActive」] boolValue]){' 所以你的問題是這兩個語句總是在發佈時是'true',並不總是在調試中。你嘗試跟蹤這些值嗎? – Rafalon

回答

0

其實我找到了解決方案。如果我們沒有提供任何在我的情況下產生問題的東西,Bool局部變量總是被初始化爲垃圾值。當我初始化BOOL addNotification = NO;它工作正常。

在這裏找到答案。 Default value of BOOL

謝謝所有。

0

不是你問的問題,但是在你的代碼中,addNotification可能在它被初始化之前被測試 - 如果第二個'if'是假的。

0

對於boolValue檢查,請試試這個

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

如果([isSuccessNumber boolValue] == YES) {

}其他 {

}

0

Boolen值可以是在設備版本上更改。那麼這條線的結果是什麼,如果這條線返回0或1,可以改變結果。 [dictNotificationData objectForKey:@"isActive"]

例如,在32位iOS和64位iOS上運行您的代碼。它應該正確地在一個上顯示「不同」,但不是另一個。

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