为什么UIWebView在applicationWillTerminate中没有加载NSURLRequest:在我的app delegate中?

时间:2013-12-20 21:20:17

标签: ios uiwebview nsurlrequest uiapplicationdelegate application-lifecycle

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

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

- (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秒的时间来完成他们正在做的事情。

我不相信这个过程会花费很长时间,因为我在应用程序的其他位置加载了相同的请求,并且它总是在几毫秒内完成。

我同步和同时尝试了这个,没有任何运气无论如何

感谢您的任何想法!

1 个答案:

答案 0 :(得分:3)

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

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

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

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