Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
终止前的iOS后台提取_Ios_Objective C - Fatal编程技术网

终止前的iOS后台提取

终止前的iOS后台提取,ios,objective-c,Ios,Objective C,我遇到的情况是,我必须在应用程序终止之前调用web服务,但在进入后台时不能调用,因为这应该只在应用程序终止时执行一次 我尝试了后台执行,但我相信一旦应用程序被终止,它将无法工作,但只有当应用程序在后台运行时 下面是我最近一次尝试的应用程序willterminate: __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{

我遇到的情况是,我必须在应用程序终止之前调用web服务,但在进入后台时不能调用,因为这应该只在应用程序终止时执行一次

我尝试了后台执行,但我相信一旦应用程序被终止,它将无法工作,但只有当应用程序在后台运行时

下面是我最近一次尝试的
应用程序willterminate:

__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
        // Call web service here 
        [application endBackgroundTask:bgTask];
        bgTask =UIBackgroundTaskInvalid;
    });

你不能这么做,老实说,你为什么要这么做

无论如何,这是一个不适定问题。如果电池没电了怎么办?如果应用程序崩溃怎么办?如果应用程序转到后台,然后操作系统在内存压力增加时终止它,该怎么办?如果您无法访问互联网,应用程序被终止,该怎么办


你能做的最接近的事情就是实现某种心跳服务,你的应用程序会定期ping。如果ping停止,则表示您的应用程序已终止或网络连接丢失

我很难看到这种模式的任何好的用例。您能否提供详细信息,说明为什么您希望这样做?您实际上想要解决什么问题?您的web服务是异步的吗?如果是这样的话,那么您可能正在调用
endBackgroundTask
,然后它就完成了。还要注意,
applocationWillTerminate
并不总是这样called@Eiko情况是,如果应用程序被终止,我想让用户自动脱机。您如何连接到服务器?如果存在打开的套接字,服务器无论如何都应该注意到。我仍然不明白这一点——对于用户来说,后台运行的应用程序和终止的应用程序看起来完全一样,用户无法在这些状态之间进行选择。所以它的感觉和行为应该是一样的。