从AFHTTPSessionManager获取数据

时间:2016-03-08 12:12:36

标签: ios objective-c http-post afnetworking

由于我是IOS的新手,AFNetworking 3,0是新的,我不知道如何从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 个答案:

答案 0 :(得分: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. 下载成功
  5. 正如您所看到的,尝试在方法结束时返回将无法正常工作,因为下载尚未完成。