NSDictionary抛出的异常对我来说不合逻辑



美好的一天。我请求某个服务器,并且挑衅地我在那里有一些 JSON 数据,所以我正在尝试解析它。我卡在我实际解析它的位置。所以我有一个名为parseJson的方法,它需要NSDictionry作为参数,所以它看起来如何

-(void)parseJson:(NSDictionary*)jsonData{

    [jsonData valueForKey:@"email"];

}

正如你在这里看到的不多,但是当代码达到

[jsonData valueForKey:@"email"];

我从昨天开始为iOS开发,唯一的例外是对我来说很奇怪,这是下一个。

此类不符合密钥电子邮件的键值编码。

所以通过谷歌搜索,我什么也没发现...几乎在每个 JSON PARSING 教程中都编写了这一行代码,所以我非常困惑这个异常意味着什么......请帮忙,我做错了什么?

完整请求代码

-(void) makeRequest{
    // Create the request.
    __block NSString *returnResponse = @"hello";
    NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue ]];
    //Create an URLRequest
    NSURL *url = [NSURL URLWithString:@"http://jsonplaceholder.typicode.com/posts"];
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
    //Create POST Params and add it to HTTPBody
    NSString *params = @"api_key=APIKEY&email=example@example.com&password=password";
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];
    //Create task
    NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest: urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        if(response!=NULL){
            returnResponse =[NSString stringWithFormat:@"%@",response];
        }else{
            returnResponse = [NSString stringWithFormat:@"%@",error.description];
        }
        [self hideSpinner];
        NSString* jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        [self parseJson:jsonString];
    }];

    [dataTask resume];

}

好的,我现在已将方法更改为

-(void)parseJson:(NSString*)jsonData{
    NSDictionary * dictionary = [[NSDictionary alloc] initWithContentsOfFile:jsonData];

     NSLog(@"%@",jsonData);
    NSString* mystring = [dictionary valueForKey:@"email"];
    NSLog(@"%@",mystring);

}

这是我在记录字符串时得到的输出

2016-01-22 00:25:48.690 testproject[627:83537] {
  "api_key": "APIKEY",
  "email": "example@example.com",
  "password": "password",
  "id": 101
}
2016-01-22 00:25:48.690 testproject[627:83537] (null)

如您所见,异常问题消失了,但现在我得到了 NULL 值。但是你可以看到,我只在上面的一行让我的儿子有了电子邮件密钥字符串......所以我完全不知道发生了什么。

valueForObject:方法与NSDictionary无关。它由KVO使用,代表键值观察。您可以使用[]objectForKey:方法从NSDictionary中检索对象。以下是示例:

dictionary[@"email"] 
//or
[dictionary objectForKey:@"email"]
/

/已编辑

不要将NSObject转换为NSString并尝试使用KVO或字典方法/语法访问属性,请尝试使用以下代码解析 NSData:

     NSDictionary *JSONDictionary =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]
     NSString *email = JSONDictionary[@"email"];

您应该能够使用我在答案的第一个版本中提到的方法/语法从JSONDictionary中检索对象。

相关内容

最新更新