0

isEqual として使用する戻り文字列の特定の部分を選択しようとしています。

guest_user_id = [[NSMutableString alloc]initWithData:[APIv2 Guest_Sign_Up:guest_email] encoding:NSUTF8StringEncoding];
guest_user = [guest_user_id JSONValue];
appDelegate.guest_user_id = guest_user [@"id"];

    NSData *jsonData = [guest_user_id dataUsingEncoding:NSUTF8StringEncoding];

NSError *e;
NSMutableDictionary *jsonList = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&e];
NSLog(@"jsonList: %@", jsonList[@"success"]);

if([jsonList [@"success"] isEqualToString:@"0"]){

API からの戻り値は次のようになります...

Return: {"success":0,"error":"That email address is already registered! Please try again or login."}

それが false であることを認識せず、else に移動します。何か案は?!:)

4

1 に答える 1

0

これを行う正しい方法は、Web から取得した JSON blob を NSJSONSerialization を使用して ObjectiveC オブジェクトに変換し、返されたオブジェクトに「成功」​​の値を要求することです。

シリアライザーを使用すると、ObjectiveC オブジェクトが返されます。

id foo = NSJSONSerialization(.....);

それで、あなたは今何をしますか?NSLog を使用して出力をダンプし、それがどのように見えるかを確認できます。この呼び出しでは、何かが辞書や文字列などであるかどうかを確認できるシンボルを使用しています。

たとえば「0」など、何かが何であるかを理解するのが難しい場合があります。それは数字ですか、それとも文字列ですか。したがって、この特殊なケースを処理する方法は、簡単な方法で行うことができます。

NSInteger theNum = [[val objectForKey:@"Success"] integerValue] は、NSString と NSNumber の両方がそのメソッドを実装しているためです (私はこれを私のコードで広く使用しています)。

しかし、あなたは本当にオブジェクトが何であるかを知りたいと思っています - ただ知りたいだけです. 次に、オブジェクトを取得します。

id foo = [val objectForKey:@"Success"]; NSLog(@"成功は %@ です", NSStringFromClass([id クラス]);

これをコードで処理したい場合は、次のようにします。

if([foo isKindOfClass[NSNumber クラス]) { ... } else if([foo isKindOfClass:[NSString クラス])) { ... }

于 2012-07-23T21:34:13.143 に答える