2016-09-26 8 views
0

В моем приложении пользователю необходимо сохранить некоторую информацию в моей базе данных.Цель c - Сохранить блок завершения при вводе приложения в фоновом режиме

[myUser saveInBackground:^(BOOL success){ 
    if(success){ 
     // Do smthing 
    } 
    else{ 
     // Alert the user 
    } 
}]; 

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

Предположим, что запрос к моей базе данных длится около 10 секунд (например, плохая сеть), и пользователь решает покинуть приложение, мой блок завершения не запускается.

Как я могу предупредить пользователя о том, что сбой не удалось, когда он уже покинул приложение?

Благодаря

ответ

1

Посмотрите на Background Modes. Этот пример взят из упомянутой документации:

- (void)yourSavingMethod { 
    UIApplication *application = [UIApplication sharedApplication]; 
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     // Unfortunately, timeout.. 
     // Clean up any unfinished task. 

     // stopped or ending the task outright. 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // Save your data. 

     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 
} 

Вы можете позвонить -beginBackgroundTaskWithExpirationHandler:, когда это действительно необходимо. Но не забудьте закончить задачу. Изучите документацию для получения более подробной информации.

+0

Ну, я думаю, что это именно то, что мне нужно. Только один вопрос, когда shoud я вызываю [application endBackgroundTask: bgTask]; ? Потому что, когда написано «// Сохранить ваши данные», вы имели в виду, что сохранение было синхронным? Потому что мой метод сохранения асинхронен, и тогда я должен вызвать endBackgroundTask, когда вызывается мой блок завершения или сразу после вызова метода сохранения? –

+0

Вы должны вызвать [application endBackgroundTask: bgTask]; когда ваше сохранение будет завершено. Он уведомляет iOS о завершенной задаче. И это всего лишь пример выполнения задачи. Вы можете называть это синхронно или асинхронно. – Oleg

+0

Хорошо. Но скажем, моя экономия длится 10 секунд, а затем все, что происходит после сохранения, также выполняется в backgroundtask? Как я могу сказать, что просто хочу сохранить выполнение в фоновом задании? –

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

  • Нет связанных вопросов^_^