6

PHPから値を取得しているとき、次JSONの問題が発生してい__NSCFBoolean isEqualToStringます:

私のコードは次のとおりです。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        //convert to JSON
        for(id key in res) {
        id value = [res objectForKey:key];

        NSString *keyAsString = (NSString *)key;
        NSString *valueAsString = (NSString *)value;
        //NSCFBoolean
        /*if([value isKindOfClass:[NSNumber class]])
        {
            printf("Number");
        }
        else if([value isKindOfClass:[NSString class]])
        {
            printf("String --- \n");
            if([value isEqualToString:@"0"])
            {
                printf("Wrong \n");
            }
            else
            {
                printf("Right \n");
            }
        }*/
        NSLog(@"%@",[valueAsString class]);
        if([keyAsString isEqualToString:@"success"])
        {
            printf("Working \n");
        }
        else
        {
            printf("Not Working\n");
        }
        //Error is in below line
        if([valueAsString isEqualToString:@"0"])// strcmp([value objCType], @encode(BOOL)) == 1)
        {
            [self loginSuccess];
        }
        else if(strcmp([value objCType], @encode(BOOL)) == 0)
        {
            [self loginFailure];
        }
        NSLog(@"key: %@", keyAsString);
        NSLog(@"value: %@", valueAsString);
    }

} }

[__NSCFBoolean isEqualToString:]:インスタンス 0x1dc9964 に送信された認識されないセレクタの問題を取得する

昨日からこの問題をGoogleで検索していますが、まだ解決策はありません。NSCFBoolean も現在 iOS 6.0 では使用できません。では、文字列から「0」または「1」をチェックするにはどうすればよいJSONでしょうか? 助けてください。

4

2 に答える 2

19

valueNSNumber オブジェクト (NSNumber はクラス クラスターであるため、__NSCFBoolean) であり、文字列ではありません。[value boolValue]0 か 1 かを判断するために使用します。

オブジェクトをキャストしても、その型は変わりません!

于 2013-02-02T14:53:24.043 に答える
0

疑わしい部分は次のとおりです。

if([keyAsString isEqualToString:@"success"] && [valueAsString isEqualToString:@"0"])
{
}

keyAsString、valueAsString (おそらくこれ)、または両方が文字列オブジェクトではありません。なんで?コードからこれを知ることはできません。おそらく、JSON データに何か問題があります。もっとコードを見せてください。

編集

これを試して :

if([keyAsString isEqualToString:@"success"] && [valueAsString isEqualToNumber:@(NO)])
{
}
于 2013-02-02T14:39:47.393 に答える