0

現在、コードに大規模なリファクトリーを行っており、Restkitの使用方法を統一したいと考えています。APIサーバーへのRPC呼び出しとREST呼び出しを行う方法を分けていました。

objectMappingを使用して行われたREST呼び出しと、RKClientを使用して行われたRPC呼び出し。それに加えて、デリゲートの代わりにブロックを使用しています。これは素晴らしいことですが、それがどのように機能するかについては疑問があります。

これは私が以前持っていたコードで、オブジェクトを投稿し、デリゲートを使用して手動でマッピングを実行し、その後、パラメーターを送信しないブロックを使用した新しいコードです。

//This was the old way...
- (void) upload: (KFMedia *) pic {

    RKParams* imageParams = [RKParams params];
    NSData* imageData = UIImageJPEGRepresentation(pic.image, 0.7f);
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"];

    [[RKClient sharedClient] post:@"/api/upload/" params:imageParams delegate:self]; 

}

//This is the new way I'm trying...
- (void) upload: (KFMedia *) pic onLoad:(RKObjectLoaderDidLoadObjectBlock) loadBlock onError:(RKRequestDidFailLoadWithErrorBlock)failBlock{

    RKParams* imageParams = [RKParams params];
    NSData* imageData = UIImageJPEGRepresentation(pic.image, 0.7f);
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"];

    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/api/upload/" usingBlock:^(RKObjectLoader *loader) {

        //Trying to set params here, but it seems that I'm not sending anything :(
        loader.params = imageParams;
        loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[KFMedia class]];
        loader.delegate = self;
        loader.onDidLoadObject = loadBlock;
        loader.onDidFailWithError = failBlock;
        loader.onDidFailLoadWithError = failBlock;
        loader.onDidLoadResponse = ^(RKResponse *response) {
            [self fireErrorBlock:failBlock onErrorInResponse:response];
        };

    }];

}

私が送信しているリクエストの本文は空です。つまり、パラメータが送信されていないか、正しく設定されていません。これを機能させる方法について何かアイデアはありますか?

4

1 に答える 1

0

問題を解決しました。loadObjectsAtResourcePathを使用して追加のパラメーターを送信するには、を使用して投稿を強制する必要があります

loader.method = RKRequestMethodPOST;

コードは次のとおりです。

- (void) upload: (KFMedia *) pic onLoad:(RKObjectLoaderDidLoadObjectBlock) loadBlock onError:(RKRequestDidFailLoadWithErrorBlock)failBlock{

    RKParams* imageParams = [RKParams params];
    NSData* imageData = UIImageJPEGRepresentation(pic.image, 0.7f);
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"];

    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/api/upload/" usingBlock:^(RKObjectLoader *loader) {

        loader.method = RKRequestMethodPOST; //This line solved the problem
        loader.params = imageParams;
        loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[KFMedia class]];
        loader.delegate = self;
        loader.onDidLoadObject = loadBlock;
        loader.onDidFailWithError = failBlock;
        loader.onDidFailLoadWithError = failBlock;
        loader.onDidLoadResponse = ^(RKResponse *response) {
            [self fireErrorBlock:failBlock onErrorInResponse:response];
        };

    }];

}
于 2012-05-25T20:49:43.407 に答える