我在寻找如何同步运行AFNetworking 2.0的示例和教程时搜索了很多,但只找到了针对AFNetworking 1.0的解决方案。我找到了以下内容:
Can AFNetworking return data synchronously (inside a block)?
下面是我的示例:
- (User *)getUserWithUsername: (NSString *) username andPassword: (NSString *) password {
NSDictionary *params = @{@"email": username, @"password": password};
[[DCAPIClient sharedClient] POST:@"login" parameters:params success:^(NSURLSessionDataTask * __unused task, id JSONResult) {
NSLog(@"JSON %@", JSONResult);
BOOL errorCode = [JSONResult objectForKey:@"error"];
if (!errorCode) {
self.username = [JSONResult objectForKey:@"name"];
// Fill the attributes
// self.email = .. a
} else {
// error with login show alert
}
} failure:^(NSURLSessionDataTask *__unused task, NSError *error) {
NSLog(@"error %@", error);
}];
// this does not work
//[[[DCAPIClient sharedClient] operationQueue] waitUntilAllOperationsAreFinished];
if (self.username == nil) {
return nil;
}
return self;
}
但这并不起作用,因为首先调用了if (self.username == nil)
。
我该如何使AFNetworking 2.0库同步运行,以便我可以返回响应?
DCAPIClient:AFHTTPSessionManager
+ (instancetype)sharedClient {
static DCAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[DCAPIClient alloc] initWithBaseURL:[NSURL URLWithString:DCAPIBaseURLString]];
_sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];
});
return _sharedClient;
}