2011-03-23 39 views
3

我使用ASIFormDataRequest將數據發佈到服務器,並且我需要張貼值的數組(字符串在下面的示例)。我使用一個枚舉器遍歷每個請求,並將它們添加到請求中,但只有最後一個出現 - 您期望的行爲setPostValue,而不是addPostValueASIHTTPRequest多個POST參數

任何想法爲什麼只有一個值通過?

NSEnumerator *pupilEnumerator = [pupils objectEnumerator]; 
id pupil; 
while ((pupil = [pupilEnumerator nextObject])) { 
    [request addPostValue:pupil forKey:@"pupils"]; 
} 

注意也會出現這種情況addFileaddPostData

乾杯。

回答

3

如果我是你我會把你的pupils對象捆綁成一個JSON字符串(我會使用JSON框架,但還有其他選項),並把它放在後身。

或者,如果你張貼到PHP腳本,你可以發佈多個值直入一個數組,通過把「[]」鍵名之後。所以,仍然在你的循環中,你可以說[request addPostValue:pupil forKey:@"pupils[]"];,然後你的發佈腳本將有一個名爲$ pupils的數組,其中將包含所有這些值。

+0

感謝丹,我發誓我以前曾嘗試過這種方式,但它不起作用,但它現在正在工作 - 我的應用程序現已完成!謝謝。 – 2011-03-24 08:36:29

4

你的循環只是不斷取代「學生」的價值。擺脫循環,並嘗試[request addPostValue:pupils forKey:@"pupils"];

+0

我給它一個嘗試,但他們的文件說,這是應該如何工作的:'[請求addPostValue:@「奔「forKey:@」names「]; [請求addPostValue:@「George」forKey:@「names」];' – 2011-03-23 17:12:59

+0

好的,這是可行的 - 謝謝。但是我無法傳遞一個數組到'addFile'。這裏是我的代碼: 'NSEnumerator * assetEnumerator = [self.assets objectEnumerator]; id assetUrl; 而((assetUrl = [assetEnumerator nextObject])){// 通過輪廓點 [請求addFile:[(NSURL *)assetUrl路徑] forKey:@ 「文件」]; }' 任何想法? – 2011-03-23 17:20:49

+0

addPostValue:forKey:不會替換現有的值,並且是執行此操作的正確方法。 問題可能在於某些服務器要求您以某種方式命名具有多個值的參數 - 例如,在PHP中,您必須使用'pupils []'而不是'pupil'。 – pokeb 2011-03-23 21:58:09

1

我遇到類似的問題,我必須的多個參數,其中之一(僅其中的一個參數)被認爲是一個數組。更簡單的方法,我發現是添加值數組到一個NSMutableArray,然後將這些值傳送到參數:

//Don't forget to set this array to retain its values in the property 
self.arrSelected = [[NSMutableArray alloc]initWithArray:nil]; 

if(switch1.selected){ 
    [self.arrServicesSelected addObject:@"value1"]; 
} 
if(switch2.selected){ 
    [self.arrServicesSelected addObject:@"value2"]; 
} 
if(switch3.selected){ 
    [self.arrServicesSelected addObject:@"value3"]; 
} 

然後你只需要經過陣列和值添加到POST參數。確保你將它們添加到不同的索引。我看到一些人在沒有索引的情況下將[]添加到[],並且這將不起作用,因爲它只會添加最後一個。如果您不使用[],則只會添加第一個。

for(int i=0; i< [self.arrSelected count];i++){ 
    [requestPOST setPostValue:[self.arrSelected objectAtIndex:i] forKey:[NSString stringWithFormat:@"chk_parameter_serv[%i]", i]]; 
} 

您還可以使用forin語法:

int i=0; 
for(NSString *strValue in self.arrSelected) 
    [requestPOST setPostValue:strValue forKey:[NSString stringWithFormat:@"chk_parameter_serv[%i]", i++]];