2015-05-06 2 views
0

Я использую RestKit/AFNetworking для связи с частной api. Этот API возвращает куки-файл с идентификатором sessionID при каждом вызове. Если вы выполняете вызов с уже использованным sessionID, он вернет ошибку. Таким образом, каждый sessionID можно использовать только один раз.RestKit/AFNetworking - отправлять только один запрос за раз (очередь)

Проблема заключается в том, что при одновременном отправке двух запросов один будет терпеть неудачу, поскольку оба они отправляются с тем же идентификатором сессии в файле cookie.

Есть ли способ сделать RestKit/AFNetworking только мои вызовы после того, как последний звонок вернулся со следующим идентификатором сессии? Я хотел бы иметь возможность просто отправлять вызовы, но они задерживаются после того, как последний вызов преуспел или завершился с ошибкой.

+0

сделать второй вызов на этапе успеха или неудачи вызова в afnetworking , –

+0

Да, правильно. Это работает. Но я действительно не хочу этого делать, поскольку вызовы api могут произойти при вводе пользователя. И я не могу предвидеть, что делает пользователь в каком порядке. Я также не хочу строить собственную систему очередей. – keyboard

+0

Является ли файл cookie автоматически или вам нужно что-то сделать? – Wain

ответ

0

Это именно то, что NSOperationQueue для:

Init NSOperationQueue и установить число параллельных задач 1:

NSOperationQueue *queue = [NSOperationQueue new]; 
queue.maxConcurrentOperationCount = 1; 

Обязательно сохранить ссылку на очереди, или он будет освобождаться ,

Чтобы добавить свои HTTP-вызовы в очередь, вам придется подклассифицировать NSOperation. Записайте свои подклассы, так что каждый экземпляр NSOperation делает синхронный запрос HTTP с в -main метода операции, а затем устанавливает идентификатор сеанса для следующей операции:

-(void)main { 
// read the previous session ID 
NSString *sessionID = [MyDataSingleton sharedInstance].sessionID; 

//make synchronous call 
... 

//Set the session ID for the next operation 
[MyDataSingleton sharedInstance].sessionID = sessionID; 
+0

Ты сделал мой день! :) – keyboard

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