2013-04-09 3 views
10

Penso di non capire il concetto di "baseURL". Questo:NSURL baseURL restituisce zero. Qualsiasi altro modo per ottenere l'effettivo URL di base

NSLog(@"BASE URL: %@ %@", [NSURL URLWithString:@"http://www.google.es"], [[NSURL URLWithString:@"http://www.google.es"] baseURL]); 

Stampe questo:

BASE URL: http://www.google.es (null) 

E, naturalmente, nel Apple docs ho letto questo:

Valore di ritorno L'URL di base del ricevitore. Se il destinatario è un URL assoluto, restituisce nil.

mi piacerebbe ottenere da questo esempio URL:

https://www.google.es/search?q=uiviewcontroller&aq=f&oq=uiviewcontroller&sourceid=chrome&ie=UTF-8

Questa base di URL

https://www.google.es

La mia domanda è semplice. C'è un modo più semplice per ottenere l'effettivo URL di base senza concatenare lo schema e il nome host? Voglio dire, qual è lo scopo dell'URL di base allora?

+0

Che risultato, esattamente, stai cercando? –

+0

Scusa, ho dimenticato di dirlo: Desidero da questo URL ad esempio: https://www.google.es/#hl=en&output=search&sclient=psy-ab&q=cats per ottenere la parte "URL di base" -> https://www.google.es – Lupi

risposta

2

Documenti per BaseURL.

baseURL 
Returns the base URL of the receiver. 

- (NSURL *)baseURL 
Return Value 
The base URL of the receiver. If the receiver is an absolute URL, returns nil. 

Availability 
Available in iOS 2.0 and later. 
Declared In 
NSURL.h 

Sembra funzionare solo per URL relativi.

Si potrebbe usare ...

NSArray *pathComponents = [url pathComponents] 

e poi prendere i bit che si desidera.

Oppure provate ...

NSString *host = [url host]; 
24

-baseURL è un concetto puramente di NSURL/CFURL piuttosto che gli URL in generale. Se avete fatto queste cose:

[NSURL URLWithString:@"search?q=uiviewcontroller" 
     relativeToURL:[NSURL URLWithString:@"https://www.google.es/"]]; 

poi baseURL sarebbe https://www.google.es/. In breve, baseURL viene popolato solo se lo NSURL viene creato utilizzando un metodo che passa esplicitamente in un URL di base. Lo scopo principale di questa funzione è di gestire le stringhe di URL relative, come potrebbe essere trovato nella fonte di una pagina web tipica.

Quello che stai cercando, invece, è di prendere un URL arbitrario e rimetterlo nella porzione dell'host. Il modo più semplice che conosco per farlo è un po 'di furbizia:

NSURL *aURL = [NSURL URLWithString:@"https://www.google.es/search?q=uiviewcontroller"]; 
NSURL *hostURL = [[NSURL URLWithString:@"/" relativeToURL:aURL] absoluteURL]; 

Questo darà un hostURL di https://www.google.es/

Ho un tale metodo pubblicato come -[NSURL ks_hostURL] come parte di KSFileUtilities (scorrere verso il basso il readme per trovare ha documentato)

Se si desidera puramente l'host e non qualcosa come schema/porta ecc., allora il metodo -[NSURL host] è il vostro metodo.

+0

Grazie per questo. – KarenAnne

-1

Ecco un modo veloce, facile e sicuro per andare a prendere l'URL di base:

NSError *regexError = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http://.*/" options:NSRegularExpressionCaseInsensitive error:&regexError]; 

if (regexError) { 
    NSLog(@"regexError: %@", regexError); 
    return nil; 
} 

NSTextCheckingResult *match = [regex firstMatchInString:url.absoluteString options:0 range:NSMakeRange(0, url.absoluteString.length)]; 

NSString *baseURL = [url.absoluteString substringWithRange:match.range]; 
+1

Che dire di https e di altri schemi? – animaonline