2011-06-01 6 views
1

Google Data APIとのインターフェイスをとるプロジェクトに取り組んでいます。私は、Googleと対話するためのHTTP GETとHTTP POSTのためのいくつかの独立したクラスを持っています。それらはすべて非同期です。私は、操作が終了する前にユーザがホームボタンに触れて、サーバ/クライアントの同期パリティが狂ってしまうのではないかと心配しています。バックグラウンドタスクAPIを理解できません。バックグラウンドブロックにすべての単一GETリクエストまたはPOSTリクエストをカプセル化して、各ブロックをアプリケーション代理人から呼び出す必要があるようです。これは本当ですか?もしそうなら、大きな頭痛が私の既存のアップロードとダウンロードのロジックの多くを書き直そうとするでしょう。iOSタスク非同期ダウンロードとアップロードのための完了パターン

ありがとうございました! =)

答えて

2

NSOperationQueueを使用してすべてのHTTPリクエストをキューに入れ、1つのバックグラウンドタスクのみを使用することをお勧めします。 setMaxConcurrentOperationCountと並行して実行できる操作の数を指定できます。

ASIHTTPRequestフレームワークを使用すると、これはASINetworkQueueのサブクラスNSOperationQueueで非常に簡単です。 バックグラウンドでのダウンロードの続行も簡単です:http://allseeing-i.com/ASIHTTPRequest/How-to-use#background_downloads_ios

+0

返信いただきありがとうございます。私はあなたの答えをupvoted、私は魔法のすべてのGoogle OAuth認証を処理するGTMHTTPFetcherと呼ばれる別のラッパーを使用しているため、私はASIHTTPRequestを使用することはできません。 – Justin

2

このプロセスを非常に簡単にするASIHTTPRequestというサードパーティのライブラリがあります。 iOS 4を使用していると仮定すると、単純にASIHTTPRequestを作成し、パラメータshouldContinueWhenAppEntersBackgroundをYESに設定すると、すべてのバックグラウンドロジックがカプセル化され、ブロックコールバックのみが公開されます。

NSURL *url = [NSURL URLWithString:@"http://example.com/path/to/resource"]; 
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
request.shouldContinueWhenAppEntersBackground = YES; 
[request setCompletionBlock:^ 
{ 
    NSString *responseString = [request responseString]; 
}]; 
[request setFailedBlock:^{ 
    NSError *error = [request error]; 
    NSLog(@"Error = %@",error); 
}]; 
[request startAsynchronous]; 
+0

私はそれを見ましたが、これはGTMHTTPFetcherラッパーを使用しているGoogleサービスであり、ASIHTTPRequestがそれをさらにラップできるかどうかはわかりません。 – Justin

関連する問題