4

私は RestKit を使用しており、クエリ パラメーター (の形式の認証トークンtoken=<token>) を使用してオブジェクトを投稿しようとしていますが、それを機能させる方法がわかりません。これが私がやっていることです...

まず、要求オブジェクト マッピングをマネージャーに追加します。

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
    [requestMapping addAttributeMappingsFromDictionary:@{
     @"id" : @"id",
     @"name"   : @"name",
     @"latitude" : @"latitude",
     @"longitude" : @"longitude"
     }];

    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[Location class] rootKeyPath:nil];

    [manager addRequestDescriptor:requestDescriptor];

次に、リクエストを行います。

RKManagedObjectRequestOperation *operation = [RKObjectManager.sharedManager  appropriateObjectRequestOperationWithObject:self method:RKRequestMethodPOST path:@"/api/v1/users/3/locations" parameters:@{@"token" : token}];

[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    Location * location = (Location*)mappingResult;
    self.id = Location.id;
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    ALog(@"fail!");
    }];

[RKObjectManager.sharedManager enqueueObjectRequestOperation:operation];

リクエストが行われると、Location オブジェクトが JSON にシリアル化され、リクエストの本文に問題なく挿入されます。ただし、トークンはクエリ文字列に追加されるのではなく、JSON として要求本文に追加されます。

例:

request.body={"id":0,name="test","longitude":-0.1337,"latitude":51.50998,"token":"Z3JlZ2c6MTM2MDU2OTk2MDY2OTpMajkxd01acWxjcGg1dEpFVy9IaEcwNTcyMWJkSEpnTFRTQTI2eXNlN29VOVRTc1UwV1lEU0E9PQ=="}

どんな助けでも大歓迎です!

4

3 に答える 3

1

https://gist.github.com/onelittlefish/5970616に Gist がありRKObjectManager、PUT または POST リクエストにクエリ パラメータを追加できるようにする優れた拡張機能を提供します。

これらのファイルをプロジェクトにドロップし、ヘッダーをインポートするだけで、@ giuseppe による回答に似たものを使用できます (これは、パスではなく本体にパラメーターを追加します)。唯一の違いは、次のように変更parametersすることqueryParametersです。呼び出しは次のようになります。

[objectManager postObject:self
                     path:@"/api/v1/users/3/locations"
          queryParameters:queryParams
                  success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

                  Location * location = (Location*)mappingResult;
                  self.id = Location.id;

              }
              failure:^(RKObjectRequestOperation *operation, NSError *error) {

                  ALog(@"fail!");

              }
];
于 2015-04-04T18:04:05.867 に答える
0

私の実装では、URL自体にクエリパラメータを追加しました。

RKManagedObjectRequestOperation *operation = [RKObjectManager.sharedManager  appropriateObjectRequestOperationWithObject:self method:RKRequestMethodPOST path:[NSString stringWithFormat:@"/api/v1/users/3/locations?token=%@",token] parameters:nil];
于 2013-01-12T13:00:25.207 に答える
0

Web で入手できる多くのチュートリアルを読むのと同じくらい簡単です。でも:

NSDictionary *queryParams;
    queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
                   token, @"token",nil];

RKResponseDescriptor *tokenResponseDescriptor =
[RKResponseDescriptor responseDescriptorWithMapping:loginMapping
                                        pathPattern:nil
                                            keyPath:@"yourpathtoyoyrkey"
                                        statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor:tokenResponseDescriptor];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

    [objectManager postObject:loginMapping
                     path:@"yourmethod.json"
               parameters:queryParams
                  success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {


                  }
                  failure:^(RKObjectRequestOperation *operation, NSError *error) {

                      //NSLog(@"Error WS RK:%@",error.localizedDescription);

                  }
 ];
于 2013-12-08T09:08:51.317 に答える