2016-03-08 3 views
1

Поскольку я новичок в IOS и AFNetworking 3,0, это новое, я не знаю, как извлекать данные из AFHTTPSessionManager. я должен следующее сообщение, и я хочу, чтобы вернуть результатПолучить данные от AFHTTPSessionManager

- (NSString *) makeServiceCall; 
{ 
    NSString *response = @""; 
    @try { 

     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
     [manager 
     POST:self.url.absoluteString 
     parameters:self.parameters 
     progress:nil 
     success:^(NSURLSessionDataTask *task, id responseObject) { 
      NSLog(@"Success: %@", responseObject);} 
     failure:^(NSURLSessionDataTask * task, NSError * error) { 
      NSLog(@"Error: %@", error); 
     }]; 
     [AFHTTPSessionManager manager].securityPolicy.allowInvalidCertificates = YES; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"%@", exception.reason); 
    } 
} 

ответ

1

Метод AFHTTPSessionManager POST:parameters:progress:success:failure: асинхронный метод.

Что вы пытаетесь сделать, это вернуть строку из метода, вызывающего его. Это не будет работать, пока метод завершится до начала загрузки.

Вы должны вызвать это с завершением блока что-то вроде этого ...

- (void)getStringWithCompletionHandler:(void (^)(id))completion { 
    NSLog(@"Method started"); 
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager 
    POST:self.url.absoluteString 
    parameters:self.parameters 
    progress:^(NSProgress * _Nonnull uploadProgress) { 
     NSLog(@"Download underway"); 
    } 
    success:^(NSURLSessionDataTask *task, id responseObject) { 
     NSLog(@"Download successful"); 
     completion(responseObject); 
    } 
    failure:^(NSURLSessionDataTask * task, NSError * error) { 
     NSLog(@"Error"); 
    }]; 

    // trying to return a string here won't work because the download hasn't finished yet. 
    // You can see the order of things happening by adding logs... 
    NSLog(@"Method finished"); 
} 

Порядок бревен в этом коде будет ...

  1. Метод начал
  2. Метод завершен
  3. Загрузить проект
  4. Загрузить

Как вы можете видеть, попытка вернуться в конце метода не будет работать, потому что загрузка еще не завершена.

+0

Извините, я обновил вопрос, я не знаю, каков тип возврата AFHTTPSessionManager, я просто хочу, чтобы метод возвращал ответ запроса. –

+0

@HarounSMIDA разве вы не читали мой ответ? Вы не можете сделать это. Загрузка является асинхронной. Он не будет загружать ответ до завершения метода. – Fogmeister

+0

@HarounSMIDA изменилось, так что теперь блок завершения примет любой тип объекта. – Fogmeister

Смежные вопросы