由于我是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);
}
}
答案 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");
}
此代码中的日志顺序为......
正如您所看到的,尝试在方法结束时返回将无法正常工作,因为下载尚未完成。