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."}

它不会看到它是错误的,只是去其他地方。有任何想法吗?!:)

4

1 回答 1

0

正确的做法是使用 NSJSONSerialization 将从 Web 返回的 JSON blob 转换为 ObjectiveC 对象,然后向返回的对象询问“成功”的值。

所以现在你已经使用了序列化器,并且你得到了 ObjectiveC 对象:

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

那你现在怎么办?好吧,您可以使用 NSLog 转储输出并查看它的外观。该调用使用的符号可以让您看到什么时候是字典、字符串等。

有时很难弄清楚某物是什么——例如“0”。那是一个数字还是一个字符串。所以处理这种特殊情况的方法可以用一种简单的方式来完成:

NSInteger theNum = [[val objectForKey:@"Success"] integerValue],因为 NSString 和 NSNumber 都实现了该方法(我在代码中广泛使用了该方法)。

但是,你真的很想知道对象是什么——只是想知道。那么你要做的是获取对象:

id foo = [val objectForKey:@"Success"]; NSLog(@"成功是一个 %@", NSStringFromClass([id class]);

你想在代码中处理这个,然后:

if([foo isKindOfClass[NSNumber class]) { ... } else if([foo isKindOfClass:[NSString class])) { ... }

于 2012-07-23T21:34:13.143 回答