Не удается проанализировать ответ afnetworking json на nsdictionary

#ios #objective-c #xcode #nsdictionary #afnetworking

#iOS #objective-c #xcode #nsdictionary #afnetworking

Вопрос:

Я пытаюсь вызвать внешний API со следующим кодом запроса afnetworking:

 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, который я ожидаю увидеть:

введите описание изображения здесь

Однако, когда я пытаюсь получить доступ к коду, например, ResponseObject [@»code»] Я получаю какой-то странный текст:

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

Затем я попытался проанализировать это с помощью NSStringwithformat %ld, но это возвращает:

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

Не уверен, что здесь происходит, был ли ResponseObject даже проанализирован должным образом как NSDictionary

любая помощь была бы оценена

Ответ №1:

я не уверен, что здесь происходит, но я рекомендую использовать Gloss framework для сериализации / десериализации JSON, чтобы напрямую отображать JSON на объекты.

http://harlankellaway.com/Gloss/

Ответ №2:

я не уверен, что происходит, но это странно

поэтому я предлагаю вам отладить его шаг за шагом

Ответ №3:

Я полагаю, что число является плавающим, попробуйте

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

Это может помочь.

Ответ №4:

итак, что вам нужно сделать, так это внутри вашего блока успеха,

 NSDictionary *result = (NSDictionary *)responseObject;

for(NSDictionary *all in result){
   int code = [all objectForKey:@"code"];
}
  

надеюсь, это поможет вашему.

примечание: лучше использовать model и добавлять эти объекты в mutable array .