2016-09-26 26 views
0

在我的應用程序中,用戶需要將一些信息保存到我的數據庫。目標c - 當應用程序在後臺輸入時保存完成塊

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

現在它的正常工作和當事情在保存過程中錯誤happenned我能夠提醒用戶只有當應用程序仍處於打開狀態,積極

假設對我的數據庫的請求持續約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

嗯,我認爲這正是我需要的。只有一個問題,當我打電話時[應用程序endBackgroundTask:bgTask]; ?因爲在寫入「//保存數據」時,您的意思是保存是同步的嗎?因爲我的保存方法是異步的,那麼當我調用完成塊時或在調用我的保存方法之後,我應該調用endBackgroundTask? –

+0

你應該調用[application endBackgroundTask:bgTask];方法,當你的保存完成。它會通知iOS完成的任務。這只是執行任務的一個例子。您可以自由地同步或異步地調用它。 – Oleg

+0

好吧。但是假設我的保存時間爲10秒,那麼在保存後發生的所有事情都會在背景任務中執行?我怎麼能說我只想保存在後臺任務中執行? –

相關問題