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

时间:2016-01-21 20:11:24

标签: ios nsdictionary

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

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


    [jsonData valueForKey:@"email"];



}

因为你在这里看不多,但是当代码到达

时我得到了exeption

[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值..但你可以看到上面只有一行我的儿子用电子邮件密钥字符串....所以我完全没有线索什么去上。

1 个答案:

答案 0 :(得分:0)

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

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

// <强> EDITED

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

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

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