Bei all den URL-verarbeitenden Objekten, die in den Standard-Cocoa-Bibliotheken (NSURL, NSMutableURL, NSMutableURLRequest usw.) herumliegen, muss ich eine einfache Möglichkeit zum programmgesteuerten Erstellen einer GET-Anforderung übersehen.
Derzeit füge ich manuell "?" gefolgt von Namenswertpaaren, die durch "&" verbunden sind, aber alle meine Namens- und Wertepaare müssen manuell codiert werden, damit NSMutableURLRequest nicht vollständig fehlschlägt, wenn versucht wird, eine Verbindung zur URL herzustellen.
Dies scheint etwas zu sein, für das ich eine vorgebackene API verwenden sollte. Gibt es etwas, das nicht in der Lage ist, ein NSDictionary mit Abfrageparametern an eine NSURL anzuhängen? Gibt es einen anderen Weg, wie ich das angehen sollte?
quelle
Antworten:
Eingeführt in iOS8 und OS X 10.10 ist
NSURLQueryItem
, dass zum Erstellen von Abfragen verwendet werden kann. Aus den Dokumenten zu NSURLQueryItem :Um einen zu erstellen, verwenden Sie den angegebenen Initialisierer
queryItemWithName:value:
und fügen Sie ihn hinzu,NSURLComponents
um einen zu generierenNSURL
. Beispielsweise:Beachten Sie, dass das Fragezeichen und das kaufmännische Und automatisch behandelt werden. Das Erstellen eines
NSURL
aus einem Wörterbuch von Parametern ist so einfach wie:Ich habe auch einen Blog-Beitrag darüber geschrieben, wie man URLs mit
NSURLComponents
und erstelltNSURLQueryItems
.quelle
Sie können eine Kategorie dafür erstellen
NSDictionary
- es gibt keinen Standardweg in der Kakaobibliothek, den ich auch finden könnte. Der Code, den ich verwende, sieht folgendermaßen aus:mit dieser Implementierung:
Ich denke, der Code ist ziemlich einfach, aber ich diskutiere ihn ausführlicher unter http://blog.ablepear.com/2008/12/urlencoding-category-for-nsdictionary.html .
quelle
Ich wollte Chris 'Antwort verwenden, aber sie wurde nicht für die automatische Referenzzählung (ARC) geschrieben, daher habe ich sie aktualisiert. Ich dachte, ich würde meine Lösung einfügen, falls jemand anderes das gleiche Problem hat. Hinweis: Ersetzen Sie
self
gegebenenfalls durch den Instanz- oder Klassennamen.quelle
Die anderen Antworten funktionieren hervorragend, wenn die Werte Zeichenfolgen sind. Wenn die Werte jedoch Wörterbücher oder Arrays sind, wird dieser Code dies verarbeiten.
Es ist wichtig zu beachten, dass es keine Standardmethode gibt, um ein Array / Wörterbuch über die Abfragezeichenfolge zu übergeben, aber PHP verarbeitet diese Ausgabe einwandfrei
Beispiele
foo = bar & translations [eins] = uno & translations [zwei] = dos & translations [drei] = tres
foo = bar & translations [] = uno & translations [] = dos & translations [] = tres
quelle
CFURLCreateStringByAddingPercentEscapes
Anrufe durchstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]
Ich habe AlBeebe überarbeitet und auf ARC-Antwort umgestellt
}}
quelle
[NSString stringWithFormat:@"?%@",[pairs componentsJoinedByString:@"&"]];
CFURLCreateStringByAddingPercentEscapes
Anrufe ersetzenstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]
Wenn Sie AFNetworking bereits verwenden (wie es bei mir der Fall war), können Sie die Klasse verwenden
AFHTTPRequestSerializer
, um das erforderliche zu erstellenNSURLRequest
.[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:@"YOUR_URL" parameters:@{PARAMS} error:nil];
Wenn Sie nur die URL für Ihre Arbeit benötigen, verwenden Sie
NSURLRequest.URL
.quelle
Hier ist ein einfaches Beispiel in Swift (iOS8 +):
quelle
queryItems
ab iOS8.0 verfügbar.Ich nahm Joels Empfehlung an
URLQueryItems
und verwandelte mich in eine Swift-Erweiterung (Swift 3).(Die
self.init
Methode ist etwas kitschig, aber es gab keineNSURL
Init mit Komponenten)Kann als verwendet werden
quelle
Ich habe eine andere Lösung:
http://splinter.com.au/build-a-url-query-string-in-obj-c-from-a-dict
Sie können es dann so verwenden:
quelle
quelle
Eine weitere Lösung: Wenn Sie RestKit verwenden , wird eine Funktion
RKURLEncodedSerialization
aufgerufenRKURLEncodedStringFromDictionaryWithEncoding
, die genau das tut, was Sie wollen.quelle
Einfache Möglichkeit zum Konvertieren von NSDictionary in eine URL-Abfragezeichenfolge in Objective-c
Beispiel: Vorname = Steve & zweiter Vorname = Gates & Nachname = Jobs & Adresse = Palo Alto, Kalifornien
Hoffnung wird helfen :)
quelle