2015-07-13 69 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

我不認爲你可以設置在setHTTPBody方法參數,可以你需要的是有前NSStringWithFormat:

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

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

中當然,這是快速的骯髒的方法 - 因爲你發送的是JSON數據,請考慮學習如何工作。

+0

出於某種原因,我得到的錯誤說「爲無可見@interface‘NSMutableURLRequest宣佈選擇setHTTPBody:dataUsingEncoding’當我用什麼所有人給了我.. – Neil

+0

@Neil?只是編輯它 – 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正文。改用詞典:

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];