0

当应用程序即将终止/进入后台时,我正在尝试清理。

但是,当调用以下代码时,

- (void)applicationWillTerminate:(UIApplication *)application
{
    NSURL* url = [NSURL URLWithString:@"http://www.mysite.com/mobile/home?sysmethod=proclogout&systype=mobile&pagetype=jquerymobile"];
    [self.webView loadRequest:[[NSURLRequest alloc] initWithURL:logoutURL]];
}

...请求开始加载,但从未完成。我在 Apple 文档中读到,一旦 applicationWillTerminate: 被调用,应用程序有大约 5 秒的时间来完成他们正在做的事情。

我不相信这个过程会花费那么长时间,因为我在应用程序的其他地方加载了相同的请求,而且它总是在几毫秒内发生。

我试过这个同步和异步,没有运气无论哪种方式.

感谢您的任何想法!

4

1 回答 1

3

UIWebView 中的请求加载是异步的。这就解释了为什么请求开始加载但从未完成。如果您想确保调用或加载某个 URL,您将不得不以某种方式阻止该applicationWillTerminate:方法退出。如果您不需要真正在 Web 视图中加载请求,则可以[NSURLConnection sendSynchronousRequest:returningResponse:error:]改为使用。

此外,一种 hacky 方法可能是这样的:

[_webview stringByEvaluatingJavaScriptFromString:@"window.location.href=\"http://example.com/logout\""];

stringByEvaluatingJavaScriptFromString:是一种阻塞、同步的方法。但是,我没有尝试过它是否真的只在请求完全加载后才返回。它可能在设置位置后已经返回。

于 2013-12-20T21:30:34.917 回答