Шаблон завершения задач iOS для асинхронных загрузок и выгрузок - PullRequest
1 голос
/ 01 июня 2011

Я работаю над проектом, который взаимодействует с API данных Google. У меня есть несколько независимых классов для HTTP GET и HTTP POST для взаимодействия с Google, и все они асинхронные. Я обеспокоен тем, что пользователь может дотронуться до кнопки «Домой» до завершения операций, что приведет к разрывам в четности синхронизации сервер / клиент. Я не понимаю API фоновой задачи, так как мне кажется, что мне нужно инкапсулировать каждый отдельный запрос GET или POST в фоновый блок, и каждый блок должен вызываться из моего делегата приложения. Это правда? Если это так, это вызвало бы сильную головную боль попытки переписать большую часть моей логики загрузки и выгрузки.

Спасибо за ваш вклад! =)

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Существует сторонняя библиотека ASIHTTPRequest, которая делает этот процесс очень простым. Предполагая, что вы используете iOS 4, вы можете просто создать ASIHTTPRequest и установить для параметра shouldContinueWhenAppEntersBackground значение YES, и оно инкапсулирует всю фоновую логику для вас и предоставит только обратный вызов блока.

NSURL *url = [NSURL URLWithString:@"http://example.com/path/to/resource"];
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.shouldContinueWhenAppEntersBackground = YES;
[request setCompletionBlock:^
{
   NSString *responseString = [request responseString];
}];
[request setFailedBlock:^{
   NSError *error = [request error];
   NSLog(@"Error = %@",error);
}];
[request startAsynchronous];
2 голосов
/ 01 июня 2011

Я рекомендую поставить в очередь все HTTP-запросы, используя NSOperationQueue, а затем использовать только одну фоновую задачу.Вы можете указать, сколько операций разрешено выполнять параллельно с setMaxConcurrentOperationCount.

Когда вы используете ASIHTTPRequest framework, это очень просто с ASINetworkQueue , подклассNSOperationQueue.Продолжать загрузку в фоновом режиме тоже просто: http://allseeing -i.com / ASIHTTPRequest / Как использовать # background_downloads_ios .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...