0

SDKを構築しています。

基本的に、開発者は、API 呼び出しを行うときに発生するエラーで呼び出されるエラー Handler 関数を渡します。

API エラー (または API によって返されるエラー) については、ドメイン ExampleAPPDomain で NSError を作成します。Api エラーの userInfo 構造は異なります (たとえば、ユーザー情報に「カテゴリ」キーを追加します)。

しかし、エラーが nsurlconnection エラーである場合もあります。そのエラーもエラー ハンドラに渡します。

だから私は電話します:

errorHandler(error)

errorHandler 関数に渡される NSError エラーは、API エラーである場合もあれば、NSUrlConnection タイプのエラー (ネットワーク エラーなど) である場合もあります。

これらのエラーを別の方法で処理するにはどうすればよいですか? たとえば、エラー ハンドラー コードでは、開発者はエラーのドメインをチェックして、そのタイプ (NSURLDomain と ExampleAPPDomain) を確認し、それに応じて処理する必要があります。これが、両方のエラーを区別する唯一の方法です。

このような場合、APPエラーとNSUrlConnection接続エラーを処理する標準的な方法は何ですか?

4

1 に答える 1

0

エラーのドメインとして常に ExampleAppDomain を指定しないのはなぜですか。そのように混乱はありません。ほとんどの標準ライブラリはこれを行います - すべてのエラーをカプセル化します。基本的に、エラーが戻ってきたら、それを NSError のドメインでラップする必要があります。応答の NSURLConnectionDelegate の受け入れ可能な statusCode AND コンテンツを確認できます。また、すべてのネットワーク コードを自分で処理する代わりに、 AFNetworking などの標準ライブラリを使用してみませんか?

ここにコードがありますが、XML/JSON に基づいて受け入れ可能なコード/コンテンツを確認する必要があります。以下は、AFNetworking からの抜粋です。

NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setValue:self.responseString forKey:NSLocalizedRecoverySuggestionErrorKey];
[userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey];
[userInfo setValue:self.request forKey:ExampleAppDomainFailingURLRequestErrorKey];
[userInfo setValue:self.response forKey:ExampleAppDomainOperationFailingURLResponseErrorKey];


NSError *error = [[NSError alloc] initWithDomain:ExampleAppDomain code:NSURLErrorBadServerResponse userInfo:userInfo];

詳細なエラー情報については、NSURLError.h ファイルを確認してください。

于 2013-10-15T20:53:33.803 に答える