Мое приложение загружает большое количество информации и изображений пользователей Flickr, и я использую AFHttpClient. Таким образом, в основном, каждый проходит через то, что эффективно является асинхронно, а затем выполняется блок завершения. Один класс имеет методы для каждого вызова api, а другой - через вызовы api, чтобы получить данные каждого пользователя, которые помещаются в основные данные. Тем не менее, моя проблема заключается в том, что я не могу определить способ для класса, вызывающего класс api, определить, когда все загрузки будут выполнены, и поместить его в основные данные. Кроме того, у меня будет одновременно загружаться несколько пользователей, а разные атрибуты завершают загрузку в разных заказах в зависимости от пользователя. Какие-либо предложения?Проверка завершения нескольких асинхронных сетевых операций
0
A
ответ
0
Хранить подсчет количества активных запросов в процессе, используя переменную экземпляра. Это может быть простой NSInteger, который увеличивается и уменьшается, или может быть словарем, введенным по имени пользователя, и при необходимости содержать номер или более подробную запись отслеживания. Это действительно зависит от того, какой уровень детализации вам нужен. Класс, который вызывает вызовы API, должен делать все управление данными записи и просто предлагать методы «count».
1
AFNetworking сделал это довольно просто управлять несколько запросом и окончательным обратным вызовом, Juste использования:
- (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations
progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock
completionBlock:(void (^)(NSArray *operations))completionBlock;
или
- (void)enqueueBatchOfHTTPRequestOperationsWithRequests:(NSArray *)urlRequests
progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock
completionBlock:(void (^)(NSArray *operations))completionBlock;
на AFHHTPClient инстанции.
Exemple:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];
NSURLRequest *otherRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];
AFHTTPRequestOperation *operationForImages = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operationForImages setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//success of images request
self.imageDictionary = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//manage error for this request
}];
AFHTTPRequestOperation *operationForText = [[AFHTTPRequestOperation alloc] initWithRequest:otherRequest];
[operationForText setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//success of text request
self.textDictionary = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//manage error for this request
}];
[[MyPersonalAFHTTPClient sharedClient] enqueueBatchOfHTTPRequestOperations:@[operationForImages,operationForText] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
//track progression of requests
} completionBlock:^(NSArray *operations) {
//all the request are completed
}];
Смежные вопросы
- 1. Многозадачность сетевых операций android
- 2. Цикл асинхронных сетевых задач (следующий выполняется после завершения предыдущего)
- 3. Выполнить запрос После завершения нескольких асинхронных запросов
- 4. Objective-C wait для асинхронных операций и обработчиков завершения очереди.
- 5. Заверните кучу асинхронных операций и дождитесь их завершения?
- 6. Очереди асинхронных операций через Promises
- 7. Выполнение асинхронных операций
- 8. Производительность асинхронных операций
- 9. Выполнение асинхронных операций обработки
- 10. Дождитесь завершения нескольких операций синтаксического анализа NSXMLParser
- 11. Обработка нескольких вложенных асинхронных операций в Bluebird (обещания)
- 12. Дождитесь завершения всех асинхронных асинхронных вызовов.
- 13. python gio ждет выполнения асинхронных операций
- 14. Цепочки асинхронных операций в iOS
- 15. Идиоматический способ блокировки асинхронных операций
- 16. Несколько асинхронных операций с Делегаты
- 17. Разрешить генерацию асинхронных операций отключить
- 18. Ожидайте результатов нескольких различных асинхронных операций с использованием Task.WhenAny
- 19. iOS - Объединение асинхронных операций на основе блоков
- 20. Обработка ошибок/данных при асинхронных сетевых вызовах
- 21. dispatch_group_t или dispatch_semaphore_t, чтобы дождаться завершения нескольких асинхронных запросов
- 22. NodeJS: Как выполнить действие после завершения нескольких асинхронных функций?
- 23. Ожидание нескольких асинхронных запросов JSON для завершения перед запуском кода
- 24. Как дождаться завершения асинхронных шагов?
- 25. Дождитесь завершения блоков асинхронных блоков
- 26. WCF Restful Service - Внедрение асинхронных операций
- 27. Когда использовать Volley для сетевых операций?
- 28. Выполнение некоторых сетевых операций внутри адаптера
- 29. Есть ли (широко внедряемый) WS- * стандарт для длительных асинхронных операций?
- 30. Android: лучшая практика для выполнения асинхронных операций в getView()
смог найти какое-либо решение Были ли вы? Пожалуйста, опубликуйте некоторые. – Meet