q0r*_*0re 4 objective-c synchronous afnetworking-2
我已经搜索了很多关于如何同步运行AFNetworking 2.0的示例和教程,并且只找到了AFNetworking 1.0的解决方案.我发现:AFNetworking可以同步返回数据(在一个块内)吗?
我的例子:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为if (self.username == nil)首先调用.
如何让AFNetworking 2.0 lib同步运行,我可以返回响应?
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;
}
Run Code Online (Sandbox Code Playgroud)
仇恨者会讨厌,但有时你只是希望你的HTTP调用是同步的.
为此,您可以使用AFNetworking-Synchronous库.它增加了一个方便的类别AFHTTPRequestOperationManager与同步方法,如syncGET和syncPOST其内部使用AFNetworking的waitUntilFinished实现同步调用.
| 归档时间: |
|
| 查看次数: |
5651 次 |
| 最近记录: |