in iOS eingeführt zu analysieren verwenden 8 und OS X 10.10 ist NSURLQueryItem
, die verwendet werden können Abfragen zu erstellen. Aus der Dokumentation auf NSURLQueryItem:
Ein NSURLQueryItem Objekt für ein Element in der Abfrage Teil einer URL ein einziges Name/Wert-Paar darstellt. Sie verwenden Abfrageelemente mit der queryItems-Eigenschaft eines NSURLComponents-Objekts.
Sie die Abfrageelemente aus einer URL, indem zuerst NSURLComponents
abrufen können:
NSURL *url = [NSURL URLWithString:@"http://stackoverflow.com?q=ios&count=10"];
NSURLComponents *components = [NSURLComponents componentsWithURL:url
resolvingAgainstBaseURL:YES];
for (NSURLQueryItem *item in components.queryItems) {
NSLog(@"name: %@, value: %@", item.name, item.value);
}
// name: q, value: ios
// name: count, value: 10
anzumerken, dass sie für -queryItems
Rückgabewert ist ein Array, kein Wörterbuch. Dies liegt daran, dass das folgende eine gültige URL ist. Beachten Sie die zwei identischen "Schlüssel" foo
.
http://google.com?foo=bar&foo=baz
Um eine URL per Abfrageelemente, verwenden Sie die benannten Initialisierer queryItemWithName:value:
und dann fügen Sie sie zu NSURLComponents
schaffen eine NSURL
zu erzeugen. Beispiel:
NSString *urlString = @"http://stackoverflow.com";
NSURLComponents *components = [NSURLComponents componentsWithString:urlString];
NSURLQueryItem *search = [NSURLQueryItem queryItemWithName:@"q" value:@"ios"];
NSURLQueryItem *count = [NSURLQueryItem queryItemWithName:@"count" value:@"10"];
components.queryItems = @[ search, count ];
NSURL *url = components.URL; // http://stackoverflow.com?q=ios&count=10
Beachten Sie, dass das Fragezeichen und das Und-Zeichen automatisch behandelt werden. ein NSURL
aus einem Wörterbuch von Parametern zu erstellen ist so einfach wie:
NSDictionary *queryDictionary = @{ @"q": @"ios", @"count": @"10" };
NSMutableArray *queryItems = [NSMutableArray array];
for (NSString *key in queryDictionary) {
NSURLQueryItem *item = [NSURLQueryItem queryItemWithName:key
value:queryDictionary[key]];
[queryItems addObject:item];
}
components.queryItems = queryItems;
ich auch eine Blog-Post mit mehr Details geschrieben habe, Building NSURLs with NSURLQueryItems.
Gute Frage. Meinst du: Wenn die URL "/ partA/partB/partC" ist, willst du "0 => partA, 1 => partB, 2 => partC". Wenn die URL "/ foo? PartA = A & partB = B" lautet, möchten Sie "partA => A, partB => B". Was ist, wenn die URL "/ partA/partB/partC? Foo = bar & ooga = booga" ist? In einem Beispiel wird die wichtige Information, die benötigt wird, um die fragliche Entität zu identifizieren, in einer Abfragestring übergeben. In dem anderen Beispiel wird die identifizierende Information im Pfad selbst rest-style übergeben. –
Ich meine, ich möchte den Pfad und die Abfrage getrennt analysieren. Es sollte nicht eine Funktion sein, die diese beiden Aufgaben kombiniert. Sehen Sie den Code, den ich zur Klärung unten angegeben habe. Wenn jemand mit einer bestehenden Implementierung antwortet, werde ich das gerne akzeptieren. – DougW
Eine Sache zu beachten ist, dass dies eine absolut gültige Abfragezeichenfolge ist: "x = 1 & x = 0 & x = foo", also ein NSDictionary möglicherweise nicht die beste Darstellung (außer Sie Arrays als Werte verwenden). – n8gray