添加参数到setHTTPBody请求Xcode

时间:2015-07-13 13:30:49

标签: ios objective-c xcode parameters

我在为我的代码行添加参数时遇到了一些麻烦。我已经创建了一个可以访问此变量的全局变量,并使用NSLog来验证它是否可访问但是我在添加变量时遇到了麻烦。

我的代码行是这个,我想添加一个已经定义为变量“ttt”的tran_id,它是NSString。我现在在代码中使用它的方式不起作用。

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

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

3 个答案:

答案 0 :(得分:1)

我认为你不能在setHTTPBody方法中设置params,你需要的是在之前有一个NSStringWithFormat:

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

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

当然,这是一种快速肮脏的方法 - 因为您要发送JSON数据,请考虑了解NSJSONSerialization的工作原理。

答案 1 :(得分:0)

使用stringWithFormat:

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

我怀疑你需要\n和那里的空白 - 它们通常只是为了让它更具人性化。这将使您的格式字符串更容易破译:

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

答案 2 :(得分:0)

您过早地将参数格式化为字符串。一旦将其格式化为字符串,就无法轻易修改这些值,也无法添加新参数。

相反,您需要收集这些参数是NSMutableDictionary,并且只有在您准备发送请求时才将其转换为JSON。

因此创建一个parameters属性:

@property (nonatomic) NSMutableDictionay *parameters;

并且不要忘记在init方法中分配它。然后,当发送请求时,使用:

生成JSON
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters 
                                                   options:0
                                                     error:&error];