从 AFHTTPSessionManager 获取数据

Get Data from AFHTTPSessionManager

由于我是 IOS 的新手并且 AFNetworking 3,0 是新的,所以我不知道如何从 AFHTTPSessionManager 检索数据。 我必须关注消息,我想要 return 结果

- (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);
    }
}

方法AFHTTPSessionManager POST:parameters:progress:success:failure:是一个异步方法。

您要做的是 return 来自调用它的方法的字符串。这将不起作用,因为该方法将在下载开始之前完成。

您需要使用类似这样的完成块来调用它...

- (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. 下载成功

如您所见,在方法结束时尝试 return 是行不通的,因为下载尚未完成。