2012-03-25 9 views
0

NSIncrementalStoreの中にNSURLConnectionを使用して、NSManagedObjectをRailsに組み込まれた残りのベースのWebサービスと同期させています。私は+sendSynchronousRequest:returningResponse:errorを認識していますが、私が理解することは、応答を適切に処理するために必要なHTTP応答ステータスコードなどのものにアクセスすることを許可しないことです、私の理解はsendSynchronousRequestが200の範囲で応答し、もしそれがなければ、本当にそれ以上のことは分かりません。私は何らかの理由で、NSURLConnectionがインスタンス化された後、現在のメソッド呼び出しをブロックし、ブロックされたメソッドによって返される可能性のある値をNSURLConnectionのデリゲートが設定した後でブロック解除する必要があると仮定しています。私はこれがNSLockとNSThreadのいくつかの組み合わせを含むと仮定していますが、私は本当にこれでどこから始めるべきかわかりません、どんな助けも大変ありがとう、ありがとう。NSURLConnectionの同期バージョンを作成するには

+0

また、NSURLConnectionDelegateのドキュメントはどこでもオンラインで入手できますか?ヘッダファイルの外には存在しません。オンラインのドキュメンテーションは認証に関してのみであり、 'connection:didReceiveResponse:'のようなものはありません。 – quinn

答えて

4

returningResponse:パラメータから取得した応答オブジェクトをNSHTTPURLResponseにキャストすると、ステータスコードとその他のHTTP固有の応答値にアクセスできます。

NSURLResponse* response = nil; 
NSError* error = nil; 
NSData* data = [NSURLConnection sendSynchronousRequest:request 
            returningResponse:&response 
               error:&error]; 
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
if ([httpResponse statusCode] == 200) { 
    // ... 
} 
+0

ありがとう、これは私にそこにほとんどすべての方法を得るようです。それは422で適切に動作するように思われますが、サーバが401で応答すると、上記の例のhttpResponse変数はnilです。これについて何かすることができますか、これは私が回避しなければならない限界ですか? – quinn

+0

一般的にはあなたのようなものを扱うように設計されている、 'NSURLConnection'よりも低レベルのAPIがほしいと思うように聞こえます。 –

2
NSError* err; 
NSHTTPURLResponse* response; 
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

あなたのHTTPレスポンスは、あなたはそれへのアクセス権を持っているので、間接によって返されます。ちょうどNSHTTPURLResponseを渡すか、そのままそれをキャストします。私は何とかNSURLConnection>がインスタンス化された後、現在のメソッド呼び出しをブロックし、NSURLConnectionのデリゲート後にブロックを解除する必要がありますと仮定してい

>はブロックされた方法で返すことができるいくつかの値を設定します。私はこれがNSLockと> NSThreadのいくつかの組み合わせを含むと仮定しています

私はあなたがこれによって何を意味するか分かりません。同期要求を実行しているため、デリゲートは必要ありません。スレッド化に関しては、これらの要求を同期的に実行しているので、GCDを使用してバックグラウンドスレッド上に作成することも、より簡単にすることもできます。私はNSOperationNSOperationQueueを調べます。

+0

アドバイスをいただき、ありがとうございます。 NSIncrementalStoreについての私の理解が正しいなら、NSIncrementalストアの外で、つまりアプリケーション内でCore Dataを使用するたびに、GCDを使用する必要があります。それが理にかなったことを願っています= /これはobj-cで初めての作業です – quinn

関連する問題