Я заметил эту строку, где вы создаете RKClient:
RKClient *client = [RKClient clientWithBaseURL:url username:username password:password];
Это в основном создает новый экземпляр каждый раз, когда вызывается метод sendLocation - вы уверены, что это ваше поведение? Если URL, имя пользователя и пароль не меняются, вы можете получить доступ к ранее созданному клиенту, позвонив по номеру [RKClient sharedClient] . В вашем текущем подходе новая очередь запросов создается для каждого нового клиента.
Теперь вернемся к делу. Посмотрите на это свойство RKRequestQueue :
/**
* The number of concurrent requests supported by this queue
* Defaults to 5
*/
@property (nonatomic) NSUInteger concurrentRequestsLimit;
Как вы видите, по умолчанию это 5, поэтому, если у вас их больше, чем в любой из ваших очередей, они будут ждать обработки текущих запросов. Вы также упомянули, что запросы складываются, когда приложение перемещается в фоновый режим, а затем, когда оно выходит на передний план, все они отправляются. Вы можете контролировать, как ваши запросы ведут себя так:
- (void)backgroundUpload {
RKRequest* request = [[RKClient sharedClient] post:@"somewhere" delegate:self];
request.backgroundPolicy = RKRequestBackgroundPolicyNone; // Take no action with regard to backgrounding
request.backgroundPolicy = RKRequestBackgroundPolicyCancel; // If the app switches to the background, cancel the request
request.backgroundPolicy = RKRequestBackgroundPolicyContinue; // Continue the request in the background
request.backgroundPolicy = RKRequestBackgroundPolicyRequeue; // Cancel the request and place it back on the queue for next activation
}
Я нашел это решение здесь . Прокрутите вниз до Фоновая загрузка / загрузка раздел.