Я пытаюсь сделать приложение iOS, которое общается с API, используя AFHTTPClient
. Первый шаг авторизуйтесь пользователем, чтобы сделать это, я использую этот код:Ожидание завершения AFHTTPRequestOperation перед продолжением
-(void)authorize
{
NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"login.php" parameters:@{@"login": account.username, @"passwd":account.password}];
AFHTTPRequestOperation *operation = [httpClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
[httpClient setDefaultHeader:@"Token" value:[[operation.response allHeaderFields] objectForKey:@"CSRF-Token"]];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
[httpClient enqueueHTTPRequestOperation:operation];
[httpClient.operationQueue waitUntilAllOperationsAreFinished];
}
Как вы можете видеть, мой код получает маркер из ответа сервера и устанавливает его в качестве заголовка по умолчанию для всех будущих запросов ,
Я затем перейти на другие запросы, используя - (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:success failure:failure
Но когда я использовал отладчик, я обнаружил, что те, другие запросы, где выполняются перед операцией авторизированным была завершена, поэтому они не потому, что они не имеют авторизации маркер. Я добавил [httpClient.operationQueue waitUntilAllOperationsAreFinished];
, но это не похоже на работу ...
Спасибо за вашу помощь
Не используйте 'wait', пока ничего не будет функционировать. Блокируйте приложение до завершения сетевого подключения. Просто поместите необходимый код в блок 'success' и вызовите' displayNextView' после его завершения. –