4

NSURLConnection'sデリゲートにconnection:didFailWithError:メッセージを受信させるために、Web サービスは何をする必要がありますか?

例: iOS アプリが Web サービスにトークンを渡し、Web サービスがトークンを検索すると、Web サービスは「無効なトークン」などのエラーで応答する必要があります。

現在、データが受信され、「connectionDidFinishLoading:」でエラー メッセージが解析されます。これは、回避しようとしている 2 つの場所でエラー チェックを行っていることを意味します。

iOS アプリと Web サービスの両方を完全に制御できます。

4

4 に答える 4

5

私の経験では(プログラミングで最も危険な3つの単語)、-connection:didFailWithError:HTTP交換が失敗した場合にのみ呼び出されます。これは通常、ネットワークエラーまたは認証エラーです(私は認証を使用しません)。HTTPメッセージが成功すると、応答コードに関係なく、-connectionDidFinishLoading:が呼び出されます。

-connection:didFailWithError:私の解決策:エラーを検出したときに呼び出します。そうすれば、すべてのエラー処理コードが1か所にまとめられます。

私の一番上に-connectionDidFinishLoading:、私は持っています:

NSError *error;
NSDictionary *result = [self parseResultWithData:self.connectionData error:&error];
if (!result) {
    [self connection:connection didFailWithError:error];
    return;
}
于 2012-05-01T18:46:40.107 に答える
1

NSUrlConnectionのデリゲートconnection:didFailWithError:が呼び出す可能性のある条件は多数あります。これらのエラーまたは定数のリストを次に示します。alertviewでは、connection:didFailWithError:でhttpエラーを表示する方がよいと思います。

-(void) connection:(NSURLConnection *)connection   didFailWithError: (NSError *)error 
{   
UIAlertView *errorAlert= [[UIAlertView alloc] initWithTitle: [error localizedDescription] message: [error localizedFailureReason] delegate:nil                  cancelButtonTitle:@"Done" otherButtonTitles:nil];  
[errorAlert show];   
[errorAlert release];     
NSLog (@"Connection Failed"); 
} 
于 2012-05-11T13:19:10.450 に答える
0

木を見て森が見えなかった。

私は一歩下がっconnection:didFailWithError:て別のデリゲートメソッドを見る必要がありましたconnection:didReceiveResponse:!!

Web サービスが完全に私の制御下にあるため、エンドポイントは 500 ステータス コードで応答できます。これは で取得されconnection:didReceiveResponse、さらに状況を説明する JSON を渡します。これは で取得および処理されconnection:didReceiveData:ます。

NSURLConnection デリゲートは、プロセス全体でさらに数ビットの状態にハングアップしますが、これまでに見つけた中で最高のコード臭がします。

Jeffery の答えは間違いなく最も正しいものでした。コールconnection:didFailWithError:バックはネットワークの障害に関連するものであり、Web サービスからの応答は接続が失敗しなかったことを意味します。

于 2013-01-12T00:09:32.800 に答える