我早就問過這個問題。我想我錯了我的問題。基本上我想在應用程序終止時將數據從應用程序保存到解析後端。即應用程序被從應用程序列表中刷入並殺死。 iOS文檔說,實際上applicationDidEnterBackground將被調用,而不是applicationWillTerminate,所以任何工作都可以用這種方法完成。當我們滑動以退出應用程序時,如果不調用applicationDidEnterBackground 100%的時間,我們如何可靠地保存數據?
applicationWillTerminate: 對於不支持後臺執行或與iOS 3.x或更低版本鏈接的應用程序,此方法始終在用戶退出應用程序時調用。對於支持後臺執行的應用程序,當用戶退出應用程序時,通常不會調用此方法,因爲在此情況下應用程序只是移至後臺。但是,在應用程序在後臺運行(未掛起)並且系統因某種原因需要終止該應用程序的情況下,可能會調用此方法。
但是,這不是100%,從我的測試applicationDidEnterBackground不會每次我退出應用程序調用。那麼,如果一個應用程序以100%保證終止並且實際上將被保存,那麼如何保存數據呢?
這是我在保存時applicationDidEnterBackground代碼:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
//End the Task
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if([self getController]){
CatsViewController *catsViewController = [self getController];
if(catsViewController.currentUser){
int count = (int)[MyViewController.currentUser.messages count];
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
currentInstallation.badge = count;
[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
else{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}
else{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}
將是偉大就在這任何指針。謝謝
任何原因,你不能改變,而不是「退出」 – Wain
我試圖保持在解析與同步保存我的徽章號碼(徽章號碼是我應用中的郵件數量)。我不想每次都打一次額外的電話來解析,我會刪除一條消息來更新對象,我寧可在應用程序放入後臺或通過一次調用退出時執行此操作。即用戶打開應用程序刪除3條消息,然後切換應用程序單個API調用更新徽章數,而不是3. – Kex