2015-07-13 2 views
0

У меня возникли проблемы с добавлением параметров в мою строку кода. Я уже создал глобальную переменную, которая может получить доступ к этой переменной, и у NSLog'а есть подтверждение того, что она доступна, но я беспокоюсь о добавлении переменной.Добавление параметров для запроса setHTTPBody Xcode

Моя строка кода это и я хотел бы добавить tran_id, который уже был определен как переменная «ttt», которая является NSString. То, как я это делаю в коде прямо сейчас, не работает.

NSLog(@"tran id: %@", ttt); 

[request setHTTPBody:[@"{\n \"partner_key\": \"VxYkMw3N8E\",\n \"auth_token\": \"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\n \"tran_id\": \"%@\"\n}", ttt dataUsingEncoding:NSUTF8StringEncoding]]; 

ответ

1

Я не думаю, что вы можете установить Params в методе setHTTPBody, что вам нужно иметь NSStringWithFormat до:

NSString *body = [NSString stringWithFormat:@"{\n \"partner_key\": \"VxYkMw3N8E\",\n \"auth_token\": \"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\n \"tran_id\": \"%@\"\n}", ttt]; 

[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]]; 

Of Конечно, это быстрый n-грязный метод - потому что вы отправляете данные JSON, подумайте о том, как работает NSJSONSerialization.

+0

По какой-то причине я получаю ошибку говоря «Нет видимых @interface для„NSMutableURLRequest заявляет о setHTTPBody селектора: dataUsingEncoding“, когда я использую то, что каждый дал мне .. – Neil

+0

@Neil? yep только что отредактировал его – streem

+0

Большое вам спасибо, это сработало! Так что моя проблема заключалась в том, что вы не можете добавить параметр в запрос, так что работа вокруг заключается в создании другого NSString и подключаемого модуля, который в? – Neil

0

Использование stringWithFormat:

[request setHTTPBody: 
    [NSString stringWithFormat:@"{\n \"partner_key\": \"VxYkMw3N8E\",\n \"auth_token\": \"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\n \"tran_id\": \"%@\"\n}", ttt] 
    dataUsingEncoding:NSUTF8StringEncoding]]; 

Я сомневаюсь, что вам нужно \n s- и пробелы в там - они, как правило, только там, чтобы сделать его более читаемый человеком. Это сделало бы ваш формат строки несколько проще расшифровать:

[request setHTTPBody: 
    [NSString stringWithFormat:@"{\"partner_key\":\"VxYkMw3N8E\",\"auth_token\":\"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\"tran_id\":\"%@\"}", ttt] 
    dataUsingEncoding:NSUTF8StringEncoding]]; 
0

Вы форматируете свои параметры в строку слишком рано. Как только он отформатирован в строку, значения не могут быть легко изменены и новые параметры не могут быть добавлены.

Вместо этого вам необходимо собрать эти параметры: NSMutableDictionary и только конвертировать его в JSON, когда вы будете готовы отправить запрос.

Поэтому создать parameters свойство:

@property (nonatomic) NSMutableDictionay *parameters; 

и не забудьте передать его в методе init. Потом, когда пришло время, чтобы отправить запрос, генерировать JSON с помощью:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters 
                options:0 
                error:&error]; 
+0

Я уже отформатировал строку в более ранней части кода, я просто не сделал загрузите его с момента его очень долго, мне просто не удается форматировать этот оператор для отправки данных. – Neil

+0

@ Неужели вы сказали, что хотите изменить значение в отформатированной строке? – trojanfoe

+0

Да, в этом выражении переменная ttt изменяется после каждого прогона из данных обратно в предыдущем json reqeust. Я должен использовать эту переменную, я вернусь, чтобы сделать еще один запрос json. – Neil

0

Вы делаете это действительно трудно на себя, используя эту большую длинную строку для настройки HTTP Body. Используйте словарь вместо:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init]; 
[dictionary setObject:@"VxYkMw3N8E" forKey:@"partner_key"]; 
[dictionary setObject:@"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl" forKey:@"auth_token"];  



NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary 
                options:NSJSONWritingPrettyPrinted error:&error]; 


NSString *jsonString; 

if (!jsonData) { 
} else { 
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
} 


[request setHTTPBody: jsonData]; 
Смежные вопросы