Introdotto in iOS 8 e OS X 10.10 è NSURLQueryItem
, che può essere utilizzata per creare query. Dalla documentazione sul NSURLQueryItem:
Un NSURLQueryItem oggetto rappresenta una singola coppia nome/valore per un elemento nella parte interrogazione di un URL. Si utilizzano gli elementi di query con la proprietà queryItems di un oggetto NSURLComponents.
È possibile recuperare gli elementi di query da un URL creando prima NSURLComponents
:
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
noti che tornano rapporto qualità--queryItems
è un array, non un dizionario. Questo perché il seguente è un URL valido. Notare i due "tasti" identici, foo
.
http://google.com?foo=bar&foo=baz
per creare un URL tramite elementi di query, utilizzare l'inizializzatore designato queryItemWithName:value:
e poi aggiungerli al NSURLComponents
per generare un NSURL
. Ad esempio:
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
Si noti che il punto interrogativo e la e commerciale vengono gestiti automaticamente. Creazione di un NSURL
da un dizionario dei parametri è semplice come:
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;
Ho anche scritto un post sul blog con più dettagli, Building NSURLs with NSURLQueryItems.
Buona domanda. Vuoi dire: se l'URL è "/ partA/partB/partC", vuoi "0 => partA, 1 => partB, 2 => partC". Se l'URL è "/ foo? PartA = A & partB = B" vuoi "partA => A, partB => B". Cosa succede se l'URL è "/ partA/partB/partC? Foo = bar & ooga = booga"? In un esempio, le informazioni importanti necessarie per identificare l'entità in questione vengono passate in una stringa di query ... nell'altro esempio, le informazioni di identificazione vengono passate in stile di riposo nel percorso stesso. –
Voglio dire, voglio analizzare il percorso e la query separatamente. Non dovrebbe essere una funzione che combina questi due compiti. Vedere il codice che ho postato di seguito per chiarimenti. Se qualcuno risponde con un'implementazione esistente, sarò felice di accettarlo ancora. – DougW
Una cosa da tenere a mente è che questa è una stringa di query perfettamente valida: "x = 1 & x = 0 & x = pippo", quindi un NSDictionary potrebbe non essere la migliore rappresentazione (a meno che non si utilizzino gli array come valori). – n8gray