2009-09-17 12 views
38

Mam następujący kod w mojej aplikacji.NSData i NSURL - adres URL z miejscem o problemie

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

pathOfThumbNail ma następującą ścieżkę


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


Kiedy otwieram powyższą ścieżkę w przeglądarce Safari - ścieżka jest zmieniana automatycznie & obraz wyświetlany jest z powodzeniem.

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


Ale w iPhone, z powodu miejsca w ścieżce, obraz nie jest załadowany NSData.

+5

Brilliant pytanie, natknęliśmy się na to przez przypadek, kiedy ma podobny problem. –

Odpowiedz

96

Zastosowanie: stringByAddingPercentEscapesUsingEncoding:

Zwraca reprezentację odbiornika przy użyciu określonego kodowania określić procent ucieka niezbędne do konwersji odbiornik do adresu URL ciąg prawnej.

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Reprezentacja odbiornika za pomocą kodowania w celu określenia procentu ucieczek koniecznych do przekonwertowania odbiornika na legalny ciąg URL. Zwraca nil jeśli kodowanie nie może kodować szczególny charakter

dodana na życzenie przez @rule wyjściu

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:

 
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

Świetnie! Dokładnie tak, jak chciałem. Właściwie wiedziałem o tym, ale zapomniałem z powodu obciążenia projektu. Kapelusze dla twojego rodzaju pomagają mi. –

+1

Twoja odpowiedź jest całkiem niezła, ale powinieneś podać przykład: NSString * urlText = @ "http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; urlText = [urlText stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * url = [NSURL URLWithString: urlText]; – rule

+0

Uwaga: stringByAddingPercentEscapesUsingEncoding nie koduje znaków zastrzeżonych, takich jak ampersand (&) i slash (/) – Deeper

10

szybkiej 3,0 podejścia (stringByAddingPercentEscapesUsingEncoding i stringByAddingPercentEncodingWithAllowedCharacters wydaje się przestarzałe):

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

Poprawny nowoczesny kod. Dzięki za to Niko! – Fattie

0

stringByAddingPercentEscapesUsingEncoding jest przestarzała w iOS 9.0, zaleca się zamiast tego używać stringByAddingPercentEncodingWithAllowedCharacters.

Oto kod Objective-C> 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);