2015-08-17 2 views
0

Я периодически вызываю несколько асинхронных служб RESTful, когда приложение работает, чтобы обновлять данные. Кроме того, я хотел бы иметь возможность выполнить такое обновление данных при получении push-уведомления, предназначенного для этого, поэтому я включил фоновый режим для удаленных уведомлений и внедрил метод делегирования didReceiveRemoteNotification:fetchCompletionHandler:.didReceiveRemoteNotification: fetchCompletionHandler: и асинхронные обновления данных?

Теперь моя проблема: поскольку мое обновление данных выполняет асинхронные вызовы нескольким веб-службам, и согласно документации необходимо вызвать метод completionHandler метода didReceiveRemoteNotification:fetchCompletionHandler:, как я могу это обработать? Или мне нужно реализовать синхронную версию обновления данных?

Благодаря

ответ

0

Нет необходимости делать синхронные вызовы для обновления данных веб-службы. Просто позвоните completionHandler, когда ваша задача будет завершена. В основном вы получите всего 30 секунд, чтобы выполнить свою работу по обновлению. При успешном обновлении просто позвоните completionHandler

Посмотрите, например:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    // Here write logic as per your requirements, check userInfo for notification data 

    // Following is http call for updation 

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; 

    NSURL *url = [NSURL URLWithString:@"YOUR URL"]; 


    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url 
                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:30.0]; 

    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPMethod:@"POST"]; 

    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     NSLog(@"RESPONSE From Server: %@", response); 

     // Do any updation work 

     // Finally call comletionHandler 
     completionHandler(UIBackgroundFetchResultNoData); 
    }]; 

    [postDataTask resume]; 
} 
+0

Спасибо, дело в том, я не знаю, как сделать 'didReceiveRemoteNotification: fetchCompletionHandler:' метод ожидания, пока обновление данных не заканчивается называть 'completionHandler' ... – AppsDev

+0

Я обновил свой ответ. –

+0

Спасибо. У меня есть несколько объектов «NSMutableURLRequest» и «NSURLConnection» для каждого из них ... как я могу дождаться окончания всех соединений в этом случае? – AppsDev

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