2011-06-29 7 views
0

私のアプリでは微妙な状況があります。私はアプリケーションでサーバーコールをしていますサーバーの応答に基づいてメソッドを起動して終了しました私は別のビューをロードする必要があります.myアプリケーションはシミュレータでうまく動作していますが、アプリケーションがサーバーの応答を取得するために時間がかかり、サーバコールを実行するためにNSThreadを試しましたが、サーバからの応答が得られるまで画面が待機しています.http://www.google.com/support/bin/answer.py?hl=ja&hl=ja app deleagteメソッドから項目を移動することはできますか?appdelegateを外に移動する

+0

サーバーからデータを取得するために同期要求を使用しましたか? – Deeps

答えて

2

より良い方法は、一時的なビューを表示し、非同期を要求するか、バックグラウンドスレッド上で実行します。あまりにも長い間メインスレッドをブロックすると、iOSはアプリを終了させます(これはあなたの場合に起こり得ることです)。ユーザーは、10秒または20秒を過ごすアプリを使用して、便利なディスプレイをアップ。サーバーから応答を受け取ったら、ディスプレイを適切に再構成することができます。

ところで、次回は明示的に質問を述べることをお勧めします。質問が現れたときにあなたが求めていることを知るのはちょっと難しいです。

0

NSURLConnectionはあなたの友人です。これを解決する最善の方法は、NSURLConnectionを使用して非同期にサーバーコールを行うことです。

アップルデベロッパーコネクションにSample Codeがあります。これはUITableViewの各行の画像を非同期的にダウンロードするため、UIがより反応的です。だから、そのコードを見れば、コードをリファクタリングできるはずです。

サーバレスポンスを非同期に読み込むと、メインスレッドを20秒以上ブロックしているため、アプリがiOSランタイムによってシャットダウンされることがなくなります。

2

iOS 4.0以降をターゲットにしている場合は、Grand Central Dispatchを使用して、バックグラウンドスレッドでネットワークコールを発信できます。ここに簡単な例があります。

// Create a dispatch queue 
dispatch_queue_t networkQueue = dispatch_queue_create("NetworkQueue", 0); 

dispatch_async(networkQueue,^{ 
    // Start your network task here. 

    // Now when it completes we will dispatch back to the main queue 
    // and you can perform UI updates 
    dispatch_async(dispatch_get_main_queue(),^{ 
     // Perform UI updates here on the main thread 
    }; 

    // Release your dispatch queue 
    dispatch_release(networkQueue); 
}; 

これは、あなたがすでに画面にいくつかの予備未実装のUIを入れていることを確認しに行っている間、。また、UIApplicationのnetworkActivityIndi​​catorを適切に表示したり、非表示にする必要があります。あなたはこれが非同期要求である

[[NSURLConnection alloc]initWithRequest:request delegate:self]; 

を呼び出す必要が

+0

+1 for GCD。しかし、それはすべてのOSバージョンでサポートされていますか? –

+0

いいえ、私が言ったように、あなたがiOSバージョン4.0以上をターゲットにしている場合にのみ利用可能です。 –

6

、あなたはappdelegateでNSURLConnectionのデリゲートメソッドを実装することができます。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection; 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; 
関連する問題