2012-06-18 13 views
5

Ich versuche, mehrere Werte für einen Parameterschlüssel an eine HTTP-Anforderung mit der AFHTTPClient-Methode "postPath" zu übergeben. Da die Parametervariable jedoch ein NSDictionary ist, kann ich für meinen Schlüssel "email" nicht mehrere Werte festlegen. Ich habe versucht, die E-Mail-Werte als eine durch Kommas getrennte Zeichenfolge zu senden, aber das funktioniert nicht, da mein Server einen Fehler zurückgibt, der besagt, dass ich keinen E-Mail-Wert angegeben habe.AFNetworking - So geben Sie mehrere Werte für einen Schlüssel an

Ich habe in der Dokumentation über die Verwendung von multipartFormRequestWithMethod Methode lesen, aber ich herausfinden, nicht vollständig konnte, wie diese Arbeit zu machen. Kann jemand ein Beispiel für die Verwendung dieser Methode mit mehreren Werten für einen einzelnen Schlüssel bereitstellen?

Dank

Reiche

+0

Da NSDictionary keine doppelten Schlüssel erlaubt, dies verhindert, dass Sie Ihren speziellen Anwendungsfall zu erfüllen. Sie können den NSMutableURLRequest, der in dieser Methode erstellt wurde, erstellen und die POST-Textzeichenfolge manuell erstellen. –

Antwort

2

Sie mehrere Werte für einen einzelnen Schlüssel nicht definieren können. Sie können jedoch einen Schlüssel für ein Array definieren, das selbst mehrere Werte enthält.

Das heißt, es nicht wie email scheint wäre ein Feld, das mehrere Definitionen haben sollte. Wenn Sie mehrere Werte akzeptieren möchten, sollten Sie diesen Parameter wahrscheinlich in emails umbenennen.

+0

Danke für die Antwort. Ich habe versucht, den E-Mail-Parameter ein NSArray übergeben, aber der Server antwortete ähnlich, dass ich keine E-Mail-Adresse übergeben hatte. Irgendwelche Ideen? –

+0

So scheint es, dass der AFNetworking-Code den Schlüssel von "E-Mail" nimmt und ihn in "email []" verwandelt, weshalb der Server eine übergebene E-Mail-Adresse nicht erkennt. Gibt es eine Möglichkeit, dies zu verhindern? –

+0

@RichMorey Das ist der Punkt: 'email []' ist eine Konvention, die von vielen Frameworks wie Rails verwendet wird, um anzuzeigen, dass mehrere Werte übergeben werden. Hast du die API geschrieben? Wenn Sie eine solche Validierung erhalten, scheint der Server nur eine einzige E-Mail zu haben. Warum tust du das nicht einfach? – mattt

4

Kombinieren der Mehrfachwerte für den einen Schlüssel.

mit NSDictionary + NSArray

Zum Beispiel:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", [NSArray arrayWithObjects:@"value3",@"value4",@"value5",nil], @"param3", nil]; 

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/yourhostpath" parameters:params]; 

Sie brauchen "url" und "yourhostpath" zu Ihrer eigenen zu ersetzen, bitte AFHttpClient Demo-Code von AFNetworking für diese verweisen.

12

Kombinieren der Mehrfachabfragewerte für einen Schlüssel.

Wenn Sie NSDictionary + NSSet verwenden erhalten Sie Abfrage url ohne [] aus NSArray.

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
[NSSet setWithObjects:@"value1", @"value2", nil], @"myKey", nil]; 

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
NSURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"/path" parameters:params]; 

PS: Besser spät als nie ...

+0

Was ist, wenn ich mehrere Parameter mit demselben Wert auch senden möchte? Diese '[NSSet setWithObjects: @" Wert1 ", @" Wert1 ", @" Wert2 ", @" Wert2 ", Nil]' funktionieren nicht. – krotov

Verwandte Themen