2013-11-07 6 views
0

У меня есть ситуации, когда мне нужно сделать несколько запрос на сервер, на котором последующий запрос будет зависеть от предыдущего запросаAFHTTPRequestOperation синхронный запрос

1) request 1 
2) process data 
3) request 2 based on data in step 2 
4) process data 

что лучший способ приблизиться к этому для AFNetworking 2

+0

Посмотрите здесь: http://stackoverflow.com/questions/11413156/ do-nsoperations-and-their-completionblocks-run-concurrently – Lefteris

+0

Исходя из этого: http://stackoverflow.com/questions/11417924/how-to-perform-a-batch-of-afnetworking-requests-that-depend- on-each-other – Lefteris

+0

проблема с http://stackoverflow.com/questions/11417924/how-to-perform-a-batch-of-afnetworking-requests-that-depend-on-each-other - блок завершения не является вызванный в последовательности, шаг 2 и этап 4 заканчивается из порядка –

ответ

1

вызова второй запрос в обработчике завершения первого запроса. Вот несколько примеров кода:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON Response 1: %@", responseObject); 

    // Process data here, and use it to set parameters or change the url for request2 below 

    [manager GET:@"http://example.com/request2.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"JSON Response 2: %@", responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error 2: %@", error); 
    }]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error 1: %@", error); 
}]; 
+0

Я думал об этом, и это была оригинальная реализация, но проблема в том, что есть не только 2-х цепной запрос, а 8, некоторые из запросов зависят от предыдущих вызовов, мне нужно было бы сгруппировать 7 блоков завершения для вызова другой операции , Я как бы прыгаю, есть более элегантное решение. Это либо это, либо обертка AFNetworking внутри параллельного NSOperation –

+0

А, очень другой вопрос. Вам, возможно, не нужно прибегать к NSOperation, будет ли это работать для вас, чтобы обернуть вызов GET в функцию и передать ваши данные в качестве одного из аргументов? – David

+0

Дэвид, что ты имеешь в виду? вы имеете в виду вызов следующего запроса в блоке завершения? –

0

я была игра вокруг и в конечном итоге реализовать собственный блок завершения и отказа блока, таким образом они могут быть выполнены на какой-нить, как операции запроса путем добавления категории к AFHTTPRequestOperation класс

- (void)startAndWaitWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success 
         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 
{ 
    [self start]; 
    [super waitUntilFinished]; 

    id responseObject = self.responseObject; // need this line for AFNetworking to create error; 

    if (self.error) { 
     if (failure) failure(self, self.error); 
    } else { 
     if (success) success(self, responseObject); 
    } 
} 

Операция начнет блокировать поток до завершения операции. Затем, в зависимости от успеха или неудачи, вызовите соответствующий блок перед завершением операции.

Таким образом, я могу цепь множественный запрос операции один за другим, и блок завершения будет иметь обработанные данные из блока завершения предыдущего запроса

Смежные вопросы