2009-09-17 9 views
38

Ho il seguente codice nella mia domanda.NSData e NSURL - url con spazio con problemi

NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:pathOfThumbNail]]; 

pathOfThumbNail ha seguente percorso


http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg


Quando ho aperto sopra percorso nel browser Safari - percorso viene modificato automaticamente viene visualizzata con successo immagine &.

http://70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg


Ma in iPhone, a causa di spazio nel percorso, l'immagine non viene caricata in NSData.

+5

domanda Brillante, inciampato su questo per caso quando si ha un problema simile. –

risposta

96

Usa: stringByAddingPercentEscapesUsingEncoding:

restituisce una rappresentazione del ricevitore usando un dato di codifica per determinare la percentuale sfugge necessario convertire il ricevitore in una stringa URL legale.

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Una rappresentazione del ricevitore utilizzando la codifica per determinare la percentuale sfugge necessario convertire il ricevitore in una stringa URL legale. Restituisce nil se la codifica non è in grado di codificare un carattere particolare

Aggiunto per richiesta da @rule

NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; 
NSString* urlTextEscaped = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *url = [NSURL URLWithString: urlTextEscaped]; 
NSLog(@"urlText:  '%@'", urlText); 
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped); 
NSLog(@"url:   '%@'", url); 

NSLog uscita:

 
urlText:  '70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg' 
urlTextEscaped: '70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg' 
url:   '70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg' 
+2

Ottimo! Esattamente come volevo. In realtà lo sapevo ma dimenticato a causa del carico del progetto. Cappelli per il tuo gentile aiuto per me. –

+1

La tua risposta è abbastanza buona, ma dovresti dare un esempio come: NSString * urlText = @ "http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; urlText = [urlText stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * url = [NSURL URLWithString: urlText]; – rule

+0

Nota: stringByAddingPercentEscapesUsingEncoding non codifica i caratteri riservati come e commerciale (&) e barra (/) – Deeper

10

Un rapido approccio 3.0 (stringByAddingPercentEscapesUsingEncoding e stringByAddingPercentEncodingWithAllowedCharacters sembra ormai deprecato):

let urlString ="your/url/".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 
+0

Il codice moderno corretto. Grazie per questo Niko! – Fattie

0

stringByAddingPercentEscapesUsingEncoding è stato dichiarato obsoleto in iOS 9.0, è consigliabile utilizzare invece stringByAddingPercentEncodingWithAllowedCharacters.

Ecco il codice Objective-C per> iOS 9,0

NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; 
NSString* urlTextEscaped = [urlText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 
NSURL *url = [NSURL URLWithString: urlTextEscaped]; 
enter code here 

NSLog(@"urlText:  '%@'", urlText); 
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped); 
NSLog(@"url:   '%@'", url); 
Problemi correlati