我之前问过这个问题。我想我的问题措辞错误。基本上我想在应用程序终止时将数据从我的应用程序保存到解析后端。即该应用程序被从应用程序列表中删除并杀死。iOS 文档说,实际上 applicationDidEnterBackground 将被调用,而不是 applicationWillTerminate,因此可以在此方法中完成任何工作。
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;
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果能得到这方面的任何指示就太好了。谢谢
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |