2009-09-17 7 views
38

Ich habe folgenden Code in meiner Anwendung.NSData & NSURL - URL mit Platzproblem

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

pathOfThumbNail hat folgenden Pfad


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


Als ich oben Pfad in Safari-Browser öffnen - Pfad automatisch geändert wird & Bild erfolgreich angezeigt wird.

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


Aber in iPhone, in Weg aufgrund von Platz wird Bild nicht in NSData geladen.

+5

Brilliant Frage, eher zufällig auf dieses zufällig, als ein ähnliches Problem haben. –

Antwort

96

Verwendung: stringByAddingPercentEscapesUsingEncoding:

Gibt eine Darstellung des Empfängers einen bestimmten Codierung den Prozentsatz zu bestimmen, entkommt notwendig, den Empfänger in eine rechtliche URL-Zeichenfolge zu konvertieren.

Eine Darstellung des Empfängers, der die Codierung verwendet, um die prozentualen Escapes zu bestimmen, die erforderlich sind, um den Empfänger in eine URL-Zeichenfolge zu konvertieren. Gibt nil zurück, wenn Codierung kann nicht ein bestimmtes Zeichen kodieren

Hinzugefügt pro Anfrage von @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 Ausgabe:

 
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

Großartig! Genau wie ich wollte. Eigentlich wusste ich es aber wegen Projektlast vergessen. Hüte von für deine freundliche Hilfe zu mir. –

+1

Ihre Antwort ist ziemlich gut, aber Sie sollten ein Beispiel geben wie: NSString * urlText = @ "http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; urlText = [urlText stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * URL = [NSURL URLWithString: URLText]; – rule

+0

Hinweis: stringByAddingPercentEscapesUsingEncoding codiert reservierte Zeichen wie kaufmännisches Und (&) und Schrägstrich (/) nicht – Deeper

10

Ein geschickter 3.0 Ansatz (stringByAddingPercentEscapesUsingEncoding und stringByAddingPercentEncodingWithAllowedCharacters scheint jetzt veraltet):

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

Der korrekte moderne Code. Danke für das Niko! – Fattie

0

stringByAddingPercentEscapesUsingEncoding wurde in iOS 9.0 nicht mehr empfohlen. Es wird empfohlen, stattdessen stringByAddingPercentEncodingWithAllowedCharacters zu verwenden.

Hier ist die Objective-C-Code für> 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);