0

API のエラーをマッピングする際に問題が発生しています。次のようなブロックを使用してリクエストをロードしています。

[self.objectManager loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
    loader.onDidLoadObjects = ^(NSArray *objects) {
        // ...
    };
    loader.onDidFailLoadWithError = ^(NSError *error) {
        // ...
    };
    loader.onDidFailWithError = ^(NSError *error) {
        // ...
    };
}];

サーバー側では、たとえば、間違ったユーザー名/パスワードでユーザーを認証しようとすると、API が次の形式でエラーを返します。

{ "error":
    {"code":"401",
    "message":"Wrong username etc. etc."}
}

オブジェクト マッピング ドキュメントで、次のことがわかりました。

RKエラーメッセージ

サーバー側のエラー メッセージを NSError オブジェクトに戻すためのマッピングを提供する単純なクラス [...] RKObjectManager が初期化されると、「エラー」および「エラー」のキーパスから RKErrorMessage のインスタンスへのオブジェクト マッピングがマッピング プロバイダーに登録されます。 . これにより、単純なエラー メッセージのすぐに使えるマッピング サポートが提供されます。[...]

オブジェクトローダーとして解釈すると、自動的に「エラー」または「エラー」keyPathがマップされ、didFailWithError:(またはブロック)が呼び出されます。しかし、これは状況ではありません。エラー応答が API から読み込まれるたびに、このエラーが発生します。

マッピング エラーの追加: keyPath のオブジェクト マッピングが見つかりませんでした: ''

この質問この質問から解決策を試しましたが、結果は同じです。

json が API から読み込まれていることはわかっています。デバッガーで追跡しました。また、RKObjectMapping を作成して「エラー」keyPath にマップすると、onDidLoadObjects ブロックがエラー オブジェクトで起動されますが、これは意図したことではありません。

簡単に言えば、私の目標は、API によって「エラー」keyPath が返されるたびに、RestKit が onDidFailWithError ブロックを起動するようにすることです。

4

1 に答える 1

0

あなたの質問から、問題はあなたのサーバーにあると思います.2xxステータスコードのエラー応答です.

他の可能性は、言及したドキュメントより前のバージョンのRKを使用しているか、バグを発見した可能性があります:)

于 2013-07-25T17:18:20.700 に答える