2012-03-06 13 views
0

私の小さな問題には良い解決策が必要です。iPhoneの目的c NSThreadのAsyncron HTTPSリクエスト

私が現時点で持っているもの: 私のアプリケーションは、asyncron httpsリクエストでうまく動作します。現時点で、アプリはJSONオブジェクトをアップロードしています。その後、オブジェクトをsqliteデータベースに保存します。

ここで、受信したサーバー応答コードが何であるかを判断するために変更する必要があります。 アップロードされたデータが有効であれば000のような応答コードを、そうでなければ151のようなコードを得ます。そのためには、応答コードをデータベースに保存するためにサーバーの応答を待たなければなりません。

私はNSThreadも実験しました。しかし、それは期待通りにはうまくいかなかった。

誰かからのご意見はありますか?私はそれが最も一般的なものの一つでなければなりません;)私はそれを見ません。

THXは、私は通常私の通信を管理するためにNSOperationQueueを使用

+1

あなたが投票した場合は、少なくとも新しいユーザーのためにヒントを与えて、彼/彼女はそれを改善するかもしれません。 –

+0

@NickWeaver、いいと思う;) –

+0

あなたの質問にお手伝いします:私は主な問題が何であるかは分かりません。どのサーバーの応答が実際にどの要求に属していたのかを判断するのに問題がありますか? –

答えて

0

をドミニク。これにより、非同期ではなく同期要求を使用してシバン全体を1つのメソッドで処理できます。

例:

-(void)doIt { 
    NSInvocationOperation *op = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doIt_) object:nil] autorelease]; 
    [opQueue addOperation:op]; 
} 

-(void)doIt_ { 
    NSData *data; 
    NSMutableURLRequest *request; 
    NSURLResponse *response = nil; 
    NSError *error = nil; 

    // Build request to spec 

    data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:error]; 

    // do something with data 

    [self performSelectorOnMainThread:@selector(yadda) withObject:yaddayadda waitUntilDone:NO]; 
} 

あなたは非同期ロードのメソッドを使用する場合、あなたはそれがダウンしてくると応答データをキャッチするためにデリゲートを実装し、終了したら、それを使って何かをしなければなりません。

+0

あなたは正しいですが、非同期リクエストを使用する必要があるため、SSL接続が必要です。 SyncronメソッドはHTTPSをサポートしていません。私はNSOperationQueueを見ていきます。 THX –

0

CFNetwork APIのラッパーであるASIHTTPRequestをご覧ください。特に、リクエストが完了したか失敗した場合に実行されるブロックを定義し、レスポンスデータを簡単に検査できる非同期HTTPリクエストに対して提供するメカニズムを調べてください。あなたのコードは次のようなものになります:

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setRequestMethod:@"POST"]; 
    // add your json object to the request 
    [request setCompletionBlock:^{ 
    int responseCode = [request responseStatusCode]; 
    NSData *responseData = [request responseData]; 
    // do whatever you want with this info 
    }]; 
    [request setFailedBlock:^{ 
    NSError *error = [request error]; 
    // handle the error 
    }]; 
    [request startAsynchronous]; 
+0

私はそれがios5/ARCでサポートされていない限り、私はASIHTTPフレームワークを使用します。 –

関連する問題