2011-11-25 82 views
26

我有看起來像這樣的web服務器的JSON響應:的iOS的NSDictionary值確定布爾從JSON布爾

{"success":true, "token":"123456"} 

,我想如果語句中使用,在一個,並將其與比較「YES 」。

但是,這樣做行不通:

NSDictionary *response = [response JSONValue]; // the JSON value from webservice response, converted to NSDictionary 

if ([response objectForKey:@"success"]){} // does not work 
if ([response objectForKey:@"success"] == YES){} // does not work 
if ([[response objectForKey:@"success"] integerValue] == YES) {} // does not work...erroneous probably 

我如何解決此問題?在布爾類型轉換也產生警告

+0

你是如何解析JSON響應? – tarmes

+0

這個問題被標記爲sbjson。我正在使用ios庫SBJSON http://stig.github.com/json-framework/ – yretuta

+0

我忘了突出顯示解析代碼,對不起 – yretuta

回答

60

因爲[response objectForKey:@"success"]不起作用,當您嘗試[response valueForKey: @"success"]會發生什麼?

我懷疑它返回一個NSNumber的,然後你可以這樣做:

NSNumber * isSuccessNumber = (NSNumber *)[response objectForKey: @"success"]; 
if([isSuccessNumber boolValue] == YES) 
{ 
    // this is the YES case 
} else { 
    // we end up here in the NO case **OR** if isSuccessNumber is nil 
} 

此外,什麼是NSLog(@"response dictionary is %@", response);樣子在你的控制檯?我看到您使用的JSON庫does return NSNumber types for objectForKey,所以我懷疑你可能沒有一個有效的NSDictionary。

+0

這個工作。謝謝:) – yretuta

+0

也適合我! –

+0

您在'NSLog'的第一個參數前缺少'@'符號 –

11

的另一種方法這一點,它不需要轉換爲NSNumber的是一樣的東西如下:

if ([response objectForKey:@"success"]) 
{ 
    if ([[response objectForKey:@"success"] boolValue]) 
     NSLog(@"value is true"); 
}