2012-05-29 5 views
3

Эта проблема может быть не связана с AFNetworking конкретно, но больше в построении NSURLRequest. Я пытаюсь отправить запрос падающую GET с использованием AFNetworking-Преобразование запроса cURL (с --data-urlencode) в AFNetworking Запрос GET

curl -X GET \ 
    -H "X-Parse-Application-Id: Q82knolRSmsGKKNK13WCvISIReVVoR3yFP3qTF1J" \ 
    -H "X-Parse-REST-API-Key: iHiN4Hlw835d7aig6vtcTNhPOkNyJpjpvAL2aSoL" \ 
    -G \ 
    --data-urlencode 'where={"playerName":"Sean Plott","cheatMode":false}' \ 
    https://api.parse.com/1/classes/GameScore 

Это из parse.com API https://parse.com/docs/rest#queries-constraints.

Однако, я не могу понять, как написать

[AFHTTPClient GetPath: параметры: успех: неудачи:]

для этого запроса. Предложение where не похоже на словарь, однако эта функция принимает только словарь для своего параметра.

+0

Day9 привел меня сюда! – dgrandes

ответ

6

Параметр ожидает NSDictionary, который будет преобразован в пары ключ/значение в URL-адресе. Поэтому ключ легко, но к значению вам нужно преобразовать его в формат JSON перед установкой его в словаре ...

NSDictionary *jsonDictionary = [[NSDictionary alloc] initWithObjectsAndKeys: 
           @"Sean Plott", @"playerName", 
           [NSNumber numberWithBool:NO], @"cheatMode", nil]; 

NSError *error = nil; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:0 error:&error]; 

if (!jsonData) { 
    NSLog(@"NSJSONSerialization failed %@", error); 
} 

NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

NSDictionary *parameters = [[NSDictionary alloc] initWithObjectsAndKeys: 
          json, @"where", nil]; 

Если мы предположим, что ваш клиент настроен что-то вроде этого (как правило, вы создаете подкласс AFHTTPClient и может переместить этот материал внутри

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://api.parse.com/"]]; 
[client setDefaultHeader:@"X-Parse-Application-Id" value:@"Q82knolRSmsGKKNK13WCvISIReVVoR3yFP3qTF1J"]; 
[client setDefaultHeader:@"X-Parse-REST-API-Key" value:@"iHiN4Hlw835d7aig6vtcTNhPOkNyJpjpvAL2aSoL"]; 
[client registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

Тогда вы должны быть в состоянии назвать

[client getPath:@"1/classes/GameScore" 
    parameters:parameters 
     success:^(AFHTTPRequestOperation *operation, id responseObject) { 
      NSLog(@"Success %@", responseObject); 
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"Failed %@", error); 
     }]; 
+0

Это работало отлично. большое спасибо! – Devang

Смежные вопросы