この動的な PUT リクエストを実行する必要があるとしましょう: "http://mydomain.com/api/5?value=66"
体は空です。戻り値として 201 (作成済み) ステータスが返され、本文で json オブジェクトが返されます。それを MyObject と呼びましょう。
現在、レストキットには次のオプションがあります。
- [[RKObjectManager sharedManager] putObject:nil mapResponseWith:MyMapping delegate:self];
MyMapping は MyObject をマップします。問題は、nil を送信すると、マッピングがわからず、「HTTP メソッド 'PUT' のタイプ '(null)' のオブジェクトのルーティング可能なパスが見つかりません」というメッセージがスローされることです。
- [[RKClient sharedClient] put:putUrl params:nil delegate:self];
ここでputUrl = "http://mydomain.com/api/5?value=66"
の問題は、応答のマッピングがないため、didLoadResponse のみがコールバックされ、didLoadObjects が呼び出されないことです。
[objectManager.router routeClass:[MyObject class] toResourcePath:putUrl forMethod:RKRequestMethodPUT];
MyObject *obj = [[MyObject alloc] init];
[[RKObjectManager sharedManager] putObject:obj mapResponseWith:MyMapping delegate:self];
ここでの問題は、最初にそれを偽造し(そうでないときに MyObject を param として送信する)、初めてしか機能しないことです。2 回目にこのメソッドを使用しようとすると、「クラス 'MyObject' と HTTP メソッド 'PUT' に対してルートが既に登録されています」という例外が発生します。
何をすべきか提案はありますか?
ありがとう