无法解析afnetworking json对nsdictionary的响应

时间:2016-10-23 13:33:56

标签: ios objective-c xcode nsdictionary afnetworking

我正在尝试使用以下afnetworking请求代码调用外部API:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                        destination, @"destination",
                        nil];

[manager POST:baseUrl parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        completion(nil, responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    completion(error, nil);
    NSLog(@"error: %@", error);
}];

当我打印出responseObject时,我得到以下是我希望看到的json:

enter image description here

但是,当我尝试访问代码时,例如responseObject [@“code”]我得到一些奇怪的文字:

(__NSCFNumber *) $0 = 0xb00000000000fa33 (long)4003

然后我尝试使用NSStringwithformat%ld解析它,但返回:

 (__NSCFString *) $1 = 0x000060800005a850 @"-5764607523034170829"

不确定这里发生了什么,是否已将responseObject正确解析为NSDictionary

任何帮助将不胜感激

4 个答案:

答案 0 :(得分:0)

我不确定这里发生了什么,但我建议使用Gloss framework进行JSON序列化/反序列化直接在对象上映射JSON。

http://harlankellaway.com/Gloss/

答案 1 :(得分:0)

我不确定发生了什么,但很奇怪

所以我建议你可以一步一步地调试它

答案 2 :(得分:0)

我想这个数字是浮点数,试试

NSNumber *num = [responseObject objectForKey:@"code"];
int theValue = [num intValue];

这可能会有所帮助。

答案 3 :(得分:0)

所以你需要做的就是,在你的成功块内,

NSDictionary *result = (NSDictionary *)responseObject;

for(NSDictionary *all in result){
   int code = [all objectForKey:@"code"];
}
希望这对你有所帮助。

注意:最好使用model并将这些对象添加到mutable array