0

私がホテルにいたとき、彼らのWifiは明らかに非常に遅いインターネット接続を介してインターネットに接続されていました. 実際にはモデムベースであった可能性があります。

その結果、アプリの HTTP GET 要求が原因で、iOS がアプリに SIGKILL を送信したように見えました (Xcode が示すように)。

なんで?直し方?

ありがとう。

4

1 に答える 1

1

HTTP リクエストをバックグラウンド スレッドに配置する必要があります。メイン スレッドが長時間応答しない場合、アプリは終了します。

通常、Web サービスの API は非同期フェッチを提供します。あなたはそれを使うべきです。

API がそのようなものを提供しない場合は、別の API を使用してください。それを除けば、自分でバックグラウンドに入れます。何かのようなもの

- (void)issuePotentiallyLongRequest
{
    dispatch_queue_t q = dispatch_queue_create("my background q", 0);
    dispatch_async(q, ^{
        // The call to dispatch_async returns immediately to the calling thread.
        // The code in this block right here will run in a different thread.
        // Do whatever stuff you need to do that takes a long time...
        // Issue your http get request or whatever.
        [self.httpClient goFetchStuffFromTheInternet];

        // Now, that code has run, and is done.  You need to do something with the
        // results, probably on the main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            // Do whatever you want with the result.  This block is
            // now running in the main thread - you have access to all
            // the UI elements...
            // Do whatever you want with the results of the fetch.
            [self.myView showTheCoolStuffIDownloadedFromTheInternet];
        });
    });
    dispatch_release(q);
}
于 2012-04-23T23:20:04.580 に答える