的NSDictionary抛出异常不符合逻辑的,我

问题描述:

好day.Im请求某些服务器和挑衅我有一些JSON数据有,所以我试图解析it.Im卡在那里我居然解析的地步。所以,我有方法称为parseJson需要NSDictionry作为参数,所以在这里它的外观的NSDictionary抛出异常不符合逻辑的,我

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


    [jsonData valueForKey:@"email"]; 



} 

,你可以看到这里不多但是当代码到达

[jsonData valueForKey:@"email"];

我越来越exeption我已经开始为之开发iOS从昨天开始,异常对我来说就像下一个怪异。

这个类不是密钥值的密钥对电子邮件顺应编码-“。

所以通过googling我发现什么都没有......并且在每个JSON PARSING教程中都非常多,这一行代码是这样编写的,所以我非常困惑这个异常是什么意思....请帮忙,我在做什么错误?

FULL请求代码

-(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 protected].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": "[email protected]", 
    "password": "password", 
    "id": 101 
} 
2016-01-22 00:25:48.690 testproject[627:83537] (null) 

时,你可以我得到看到异常问题消失了,但现在我得到NULL值..但你可以看到,只有一行上面我得到了我的儿子与他们所有的关键字符串....所以我完全不知道发生了什么事情。

+0

你试过只是'jsonData [@ “电子邮件”]'? – luk2302

+0

...............即时通讯新到iOS:●只有2天....我真的Android上的专家不是在iOS上:D所以反正生病尝试看到最新那里的一切... –

+0

好吧,当我尝试我得到另一个异常......:/该死的iOS异常描述如此怪异无法理解任何东西.... –

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

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

// EDITED

,而不是与KVO或字典方法/语法转换NSObjectNSString,并试图访问属性,请尝试使用下面的代码来解析NSData的:

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

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

+0

我确实在评论中告诉过这个请阅读上面 –

+0

如果你没有找到我的答案宝贵,请让我知道,我会删除它。我相信,解释您的问题的原因并参考KVO文档将帮助您学习。 –

+0

试图了解问题是,我知道...我试过,但没有为我工作.... –