Я разрабатываю библиотеку, которая получает данные с сервера json
, и я использую NSURLSessionDataTask
. Чтобы протестировать мою библиотеку, я создал новый проект, который вызывает этот библиотечный метод.NSURLSessionDataTask и блок обработчика
typedef void (^CompletionBlock)();
// More stuff...
- (void)downloadAllPodcastsMetadataWithCompletionHandler:(CompletionBlock)block{
NSURL *url = [NSURL URLWithString:@"MyServerURL"];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// Connection and response handling stuff...
// When my data is saved, executes the block parameter
dispatch_async(dispatch_get_main_queue(), ^{
block();
});
}
[dataTask resume];
}
EDIT: Я забыл поставить [dataTask резюме] здесь, но это в моем коде. Сожалею.
EDIT 2: Итак, как некоторые из вас сказали, я изменил dispatch_sync с dispatch_async. Но результат тот же :(
В моем тестовом проекте я называю этот метод, как это.
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[manager downloadAllPodcastsMetadataWithCompletionHandler:^{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}];
Но сетевой активности Индикатор не показывает. Это как параметр блока не выполняется.
это потому, что он выполняет NSURLSessionDataTask
логику внутри библиотеки, а затем я должен использовать что-то другое вместо dispatch_sync
?
Я уже проверил NSURLSessionDataTask not executing the completion handler block, и я думаю, что сделать то же самое. Если это поможет s, менеджер - Singleton. Есть предположения?
спасибо.
я написал класс, который может помочь вам: не https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch24p842downloader/ch37p1099downloader/MyDownloader.m – matt
не используйте 'не dispatch_sync', если вы знаете, именно то, что вы делаете. Вы блокируете себя здесь! – matt
Вау, спасибо за этот класс. Я проверю это: – WedgeSparda