web-dev-qa-db-ja.com

iOS NSDictionary値は、JSONブール値からブール値かどうかを決定します

次のようなWebサーバーからのJSON応答があります。

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

そして、それをifステートメントで使用して、 "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

どうすればこれを回避できますか?ブールで型キャストすると警告も出ます

27
yretuta

_[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ライブラリが表示されます objectForKeyのNSNumberタイプを返します なので、有効なNSDictionaryがない可能性があります。

61

NSNumberへの変換を必要としない、これに対する代替アプローチは、以下のようなものです。

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