2

if ステートメントが機能しません。active1 を返しますが、IF statement

JSONDecoder *jsonKitDecoder = [JSONDecoder decoder];
NSDictionary *dict  = [jsonKitDecoder objectWithData:jsonData]; 

NSString *userid = [dict valueForKeyPath:@"users.user_id"];
NSString *active = [dict valueForKeyPath:@"users.active"];

NSLog(@"%@",userid);    // 2013-06-20 03:03:21.864 test[81783:c07] (74)
NSLog(@"%@",active);    // 2013-06-20 03:03:21.864 test[81783:c07] (1)

if ([active isEqualToString:@"1"]){
    // Do something
}

私はこれを機能させることができないようですIF。を に変更する必要がありNSStringますintか?

4

3 に答える 3

6

まず、辞書から値を取得するための最新のスタイルを使用してvalueForKeyPath:ください。

NSDictionary* users = dict[@"users"];
id active = users[@"active"];

モダンなスタイルを使用すると、アクティブな値は実際にはブール値を表す NSNumber になると思います。したがって、if ブロックは次のようになります。

if([active isKindOfClass:NSNumber] && [active boolValue]) {
    //active is an NSNumber, and the user is active
}
于 2013-06-20T01:22:14.813 に答える
3

if ステートメントの構文は問題ありません。上記のように、辞書から値を取得する別の方法を試してみます。

NSString *active = @"1";

if ([active isEqualToString:@"1"])
{
    // Do something
    NSLog(@"It works!");
}

于 2013-06-20T01:27:46.993 に答える
1

おそらく、users.activeその NSDictionary 化された JSON ストリームから返される " " オブジェクトは、NSNumber オブジェクトのペイロードとしてのBOOL" " または " " であり、NSString オブジェクトではありません。NSInteger

使用してみてください:

NSNumber * activeNumber = [dict valueForKeyPath: @"users.active"];

if ([activeNumber boolValue] == YES)「 」がうまく機能するかどうかを確認してください。

于 2013-06-20T01:18:45.903 に答える