2012-02-29 16 views
0

多くのビューを持つアプリケーションがあります(タブバーコントローラを使用しています)。ユーザーが表示している現在のビューとは独立して、同時の非同期HTTP要求を作成したい。 http要求が応答されたら、ユーザーインターフェイスを更新してから、再度要求します。私は、UIViewControllerのサブクラス内のコードを記述すると、すべて正常に動作します。ユーザーが表示しているタブを知らなくても、私のコードをどこに書くことができますか?私はスレッドを使用しないようにしたいと思います。それは可能ですか?バックグラウンドでの複数の非同期HTTP要求iPhone

私はhttp要求を受け取り、何か新しいものがあるときに応答するWebサービスを作った。だから、私は新しい情報を要求し、Webサービスのウィンドウを開いて私に話をします。そうして私は "永続的な"接続を行います。

最後に、自分のモデルに変更が加えられたことを通知する最も良い方法は何ですか。 NSNotification?委任?

UPDATE

以下のコードは、任意の応答を受信しません。それはBAD_ACCESSを受け取り、クラッシュします。 、NSURLConnectionDelegateクラスを作成し、モデルの代理人として、そのクラスを設定し、UIを更新するためにそれを使用する:returningResponse:エラー手動sendSynchronousRequestを呼び出さない限り

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    // Request Data 
    ConnectionHandler *connectionHandler = [[ConnectionHandler alloc] init]; 
    [connectionHandler requestSO]; 
    [connectionHandler requestSopen]; 
    // Make Root View Controller 
    MainViewController *mainViewcontroller = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
    [self.window setRootViewController:mainViewcontroller]; 
    // 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

答えて

0

スレッドを避けるのは間違いですが、中央の場所からすべてのプロセスを実行したいのであれば、appDelegateは1つの場所から実行できます。個人的には、モデル内のすべてのネットワーク要求を実行しています。

+0

スレッドを避けるのはなぜ間違っていますか? –

+2

別のバックグラウンドスレッド(メインスレッド以外)でリクエストを実行すると、アプリのユーザーインターフェイスが応答しやすくなります。メインスレッドのすべてのプロセスを実行しているため、あなたのUIが非常に反応しない場合は、アプリケーションがOSによって殺される可能性があります。 http://www.raywenderlich.com/4295/multithreading-and-grandcentral-dispatch-on-ios-for-beginners-tutorialを参照してください。 – ader

2

NSURLConnectionはデフォルトの非同期です。

+0

httpリクエストはどこで発生する必要がありますか?私はいつもこのコードを実行する必要があります。私は今どの画面を表示するのではないのですか? –

+1

バックグラウンドスレッドを使用してください...メインスレッドで何が実行されているかにかかわらずリクエストを送信し続けることができます。 – Prathiba

+0

スレッドを避けたいです。それを行うより安全な方法はありますか? –

関連する問題