0

RestKitバージョン 0.10.x で使用し

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/special/path" usingBlock:^(RKObjectLoader *loader) {
            loader.objectMapping = aMapping;
            loader.delegate = _delegate;
            loader.method = RKRequestMethodPOST;
            loader.userData = [MobileGatewayReauthentication class];
            loader.params = [anDictionary toJsonRKParam];
        }];

パラメータのコレクションをリクエストのHTTPボディとして送信するには、 NSDictionarytoを追加します。loader.params


RestKit 0.20.0 以降、メソッドは次のメソッドに置き換えられました。ここでは、HTTP ボディ (JSON エンコード) として使用されるinloadObjectsAtResourcePathを渡すことができなくなりました。NSDictionaryparameters

[RKObjectManager.sharedManager getObjectsAtPath:path parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{
    NSLog(@"success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"failure");
}];

[[RKObjectManager sharedManager].HTTPClientAFNetworking )で作業する場合、設定すると魅力的に機能します:

[[RKObjectManager sharedManager].HTTPClient setParameterEncoding:AFJSONParameterEncoding];

[[RKObjectManager sharedManager].HTTPClient postPath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response: %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@",error.localizedDescription);
}];

しかし、より高度なオブジェクト マッパーが必要です。


[[RKObjectManager sharedManager].HTTPClient setParameterEncoding:AFJSONParameterEncoding];

[RKObjectManager sharedManager] には影響しませんが、

[[RKObjectManager sharedManager].HTTPClient setDefaultHeader:@"aHeader" value:@"aValue"];

もっている。だから私もそれがsetParameterEncodingうまくいくと思いました。

それはバグですか、まだ実装されていませんか、それとも何か見逃していますか?

どうもありがとう。

4

3 に答える 3

3

私は本当に何かを逃しました。

loadObjectsAtResourcePathget は (確かに) で呼び出されRKRequestMethodGETます。そのため、パラメーターは HTTP 本文ではなく URL に追加されます。

パラメーターを JSON HTTP 本文として追加するには、post メソッドを使用する必要があります。たとえば、

- (void)postObject:(id)object
              path:(NSString *)path
        parameters:(NSDictionary *)parameters
           success:(void (^)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult))success
           failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure;

性急な質問ですみません。私は前にそれを見たはずです。

于 2012-12-18T12:12:37.667 に答える
0

私があなたの問題を正しく理解していれば、RestKit作成者はあなたの問題を解決する可能性のある開発ブランチ(常にテストされており、使用しても安全です)に何かをプッシュしました(Commit here)。これは基本的にデフォルトでこれを設定します:

[[RKObjectManager sharedManager].HTTPClient setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
[[RKObjectManager sharedManager].HTTPClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

この助けを願っています!

于 2012-12-12T19:11:14.297 に答える
0

getObjectsAtPath:path のパスに問題がある可能性があります。パスの先頭にスラッシュ (/) を使用している場合は、次の例に示すように baseurl の末尾に移動します。

NSURL *baseURL = [NSURL URLWithString:@"http://rest.example.com:8080/test/"];
    AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];


[objectManager getObjectsAtPath:@"rest/updates"
                         parameters:nil
                            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                                NSLog(@"success");
                            }
                            failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                NSLog(@"failure");
                            }];
于 2012-12-18T08:44:42.703 に答える