【问题标题】:Get Data from AFHTTPSessionManager从 AFHTTPSessionManager 获取数据
【发布时间】:2016-03-08 12:12:36
【问题描述】:

由于我是 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);
    }
}

【问题讨论】:

    标签: ios objective-c http-post afnetworking


    【解决方案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. 下载成功

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

    【讨论】:

    • 对不起,我更新了问题,我不知道AFHTTPSessionManager的返回类型是什么,我只是想要返回请求响应的方法。
    • @HarounSMIDA 你没看我的回答吗?你不能这样做。下载是异步的。在方法完成之前它不会下载响应。
    • @HarounSMIDA 已更改,因此现在完成块将接受任何对象类型。
    • 我没有做任何下载的事情。只是一个帖子请求
    • @HarounSMIDA 好的,那么响应来自哪里?您想返回什么响应?它是来自您要发布到的服务器的响应吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2013-12-23
    • 2013-10-11
    • 2011-02-24
    相关资源
    最近更新 更多