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]];
}

... リクエストの読み込みが開始されますが、決して終了しません。applicationWillTerminate: が呼び出されると、アプリが行っていることを完了するのに〜5秒かかることをAppleのドキュメントで読みました。

この同じリクエストをアプリの別の場所にロードするため、プロセスにそれほど時間がかかるとは思いませんが、それは常にわずか数ミリ秒で行われます。

私はこれを試しました同期と非同期で、運が悪いどちらにしても.

ご意見ありがとうございます。

4

1 に答える 1

3

UIWebView でのリクエストの読み込みは非同期です。これが、リクエストの読み込みが開始されても終了しない理由を説明しています。特定の URL が呼び出されるか読み込まれることを確認したい場合は、何らかのapplicationWillTerminate:方法でメソッドが終了しないようにする必要があります。Web ビューでリクエストを実際にロードする必要がない場合は、[NSURLConnection sendSynchronousRequest:returningResponse:error:]代わりに使用できます。

また、これを行うための一種のハッキーな方法は次のようになります

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

stringByEvaluatingJavaScriptFromString:ブロッキング、同期メソッドです。ただし、リクエストが完全にロードされた後にのみ返されるかどうかは試していません。場所を設定した直後に、すでに戻っている可能性があります。

于 2013-12-20T21:30:34.917 に答える