NSDictionary 抛出异常对我来说不合逻辑
NSDictionary throws exception not logical for me
很好 day.Im 向某个服务器请求并且我挑衅地在那里有一些 JSON 数据所以我试图解析 it.Im 卡在我实际所在的位置解析 it.So 我有一个名为 parseJson 的方法,它需要 NSDictionry 作为参数所以这里看起来如何
-(void)parseJson:(NSDictionary*)jsonData{
[jsonData valueForKey:@"email"];
}
你在这里看不到太多,但当代码到达
时我得到了例外
[jsonData valueForKey:@"email"];
从昨天开始,我几乎已经开始为 iOS 开发了,但下一个例外对我来说太奇怪了。
此 class 与密钥电子邮件的密钥值编码不兼容。'
所以通过谷歌搜索我什么也没发现...几乎在每个 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 使用它代表 Key-Value 观察。您可以使用 []
或 objectForKey:
方法从 NSDictionary
检索对象。以下是示例:
dictionary[@"email"]
//or
[dictionary objectForKey:@"email"]
//已编辑
不要将 NSObject
转换为 NSString
并尝试使用 KVO
或字典 methods/syntax 访问属性,请尝试使用以下代码解析 NSData:
NSDictionary *JSONDictionary =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]
NSString *email = JSONDictionary[@"email"];
您应该能够使用我在第一版答案中提到的 methods/syntax 从 JSONDictionary
中检索对象。
很好 day.Im 向某个服务器请求并且我挑衅地在那里有一些 JSON 数据所以我试图解析 it.Im 卡在我实际所在的位置解析 it.So 我有一个名为 parseJson 的方法,它需要 NSDictionry 作为参数所以这里看起来如何
-(void)parseJson:(NSDictionary*)jsonData{
[jsonData valueForKey:@"email"];
}
你在这里看不到太多,但当代码到达
时我得到了例外[jsonData valueForKey:@"email"];
从昨天开始,我几乎已经开始为 iOS 开发了,但下一个例外对我来说太奇怪了。
此 class 与密钥电子邮件的密钥值编码不兼容。'
所以通过谷歌搜索我什么也没发现...几乎在每个 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 使用它代表 Key-Value 观察。您可以使用 []
或 objectForKey:
方法从 NSDictionary
检索对象。以下是示例:
dictionary[@"email"]
//or
[dictionary objectForKey:@"email"]
//已编辑
不要将 NSObject
转换为 NSString
并尝试使用 KVO
或字典 methods/syntax 访问属性,请尝试使用以下代码解析 NSData:
NSDictionary *JSONDictionary =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]
NSString *email = JSONDictionary[@"email"];
您应该能够使用我在第一版答案中提到的 methods/syntax 从 JSONDictionary
中检索对象。