8

WCF Data Services への接続に RestKit を使用しています。

応答マッピングの問題により、RKObjectManager の postObject 関数を使用してエンティティを追加する際に問題が発生しています。

エンティティが追加されると、WCF Data Services は 201 ステータス コードと新しく追加されたエンティティを (応答として) 返します。

応答を無視して、返されたステータス コードだけを使用して、追加が成功したかどうかを確認することはできますか?

ポンヌ

4

3 に答える 3

1

サーバーから返された新しく追加されたエンティティを無視する必要があるのはなぜですか? その結果のマッピングは、ローカル表現をサーバーのものと同期させるのに役立ちます。サーバーがオブジェクト ID などのオブジェクトの一部のフィールドを上書きした可能性があり、それを追跡する必要があります。

マッピング エラーがある場合は、おそらく POST アクションへの応答が、GET で返されたものとは異なるオブジェクトの表現を返すためです。使用してみましたか:

- (RKObjectLoader*)postObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate

代わりに、返されたデータにより適切なマッピングを指定しますか?

于 2012-02-05T13:26:29.613 に答える
0

応答のパラメーターを気にしない単純な RKObjectMapping を作成します。

[RKObjectMapping mappingForClass: [NSNull class]];
于 2014-10-03T08:16:57.413 に答える
0

ここでの問題は、REST サービスを変更することである可能性があるため、特定のリソース パスへの postObject 呼び出しの場合、didFailWithError へのコールバックを無視することで解決できます。

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
if ([objectLoader wasSentToResourcePath:@"/rest/api/returns/201" method:RKRequestMethodPOST] && [[objectLoader response] statusCode]==201) {
    NSLog(@"Object created");
} else {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Communication error"
                                                        message:[NSString stringWithFormat:@"Received status code %d: %@",                                                                                               objectLoader.response.statusCode,                                                                                               error.localizedDescription]                                                           delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
}
于 2012-03-17T07:46:06.107 に答える