0

私は、PUT リクエストでオブジェクトを更新できる API を使用しています - 次の形式 (w/curl):

curl --request PUT -u <api_key>: <api_url> \
-d "attribute=newvalue"

つまり、curl にリストされている関連オブジェクト (API url で参照される) の属性が更新され、更新されたオブジェクトが返されます。

マップされたオブジェクトで RestKit を使用していますが、すべてが GET で適切に機能します。しかし、マップされたオブジェクトの属性を更新した後、RKObjectManager の putObject メソッドを機能させるのに苦労しています。

 [objectManager putObject:<someObject>
               path:path
               parameters:nil
               success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {}
               failure:^(RKObjectRequestOperation *operation, NSError *error) {
                [self.refreshControl endRefreshing];
               }
 ];

最初のパラメーターとして入力したものは何でも-更新されたマップされたオブジェクト、JSON 化された辞書、単なる古い本文文字列であっても、RestKit から「要求データを解析できませんでした。JSON が無効です」というエラーが返されるようです。私は何を間違っていますか?

4

1 に答える 1

1

<someObject>データモデルのクラスのインスタンスである必要があります。クラスには、一連のマッピングが定義されている必要があります。

クラスがあったとしましょうPerson。マッピングと応答記述子を定義して、RestKit がダウンロードした JSON をPersonオブジェクトに変換できるようにします。ここで、リクエスト記述子を定義するために を取得する必要がありますinverseMapping。これにより、RestKit はアップロードのためにシリアル化する方法を認識します。

これにより、RestKit はあなたの を受け取り<someObject>、それを JSON (要求記述子) にシリアライズし、それをサーバーに送信してから、応答を受信し、そのデータを更新されたオブジェクト (応答記述子) にマップし直すことができます。

ここの例を確認してください。ディクショナリを使用して更新された属性を保持しますが、原則は同じです。ディクショナリを使用すると、完全なオブジェクトではなく部分的なオブジェクトを簡単にアップロードできます。

于 2013-05-04T07:22:19.293 に答える