może to być bardzo łatwe, ale nie wydaje mi się, aby dowiedzieć się, dlaczego URLWithString:
zwraca tutaj zero.
//localisationName is a arbitrary string here
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false&key=", webName];
NSURL* url = [NSURL URLWithString:stringURL];
webName
przed Twoim telefonemstringWithFormat:
? Jaka jest zatem wartośćstringURL
przed twoim wezwaniemURLWithString:
? SłużyNSLog()
do drukowania ich krok po kroku lub ustawiania punktów przerwania i sprawdzania wartości podczas ich ustawiania.Odpowiedzi:
W zakodowanym na stałe adresie URL musisz również zmienić znaczenie znaków spoza zestawu ASCII:
//localisationName is a arbitrary string here NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName]; NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL* url = [NSURL URLWithString:webStringURL];
Prawdopodobnie możesz usunąć znak ucieczki localisationName, ponieważ zostanie on obsłużony przez zmianę znaczenia całego ciągu.
źródło
stringByAddingPercentEscapesUsingEncoding
konwertuje # na% 2webStringURL = [stringURL stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
Użyj tej funkcji, jeśli masz do czynienia z plikiem zapisanym w menedżerze plików.
NSURL *_url = [NSURL fileURLWithPath:path];
źródło
Myślę, że musisz użyć
-[NSString stringByAddingPercentEscapesUsingEncoding:]
. Zobacz dokument Apple .Innym komentarzem jest to, że jako stary timer uważam, że umieszczanie znaków spoza ASCII w pliku źródłowym jest trochę trudne. To powiedziawszy, ten dokument Apple mówi, że począwszy od 10.4, ciągi znaków UTF-16 są w porządku w środku
@"..."
. W jakiś sposób GCC wydaje się poprawnie konwertować plik źródłowy w Latin-1 do UTF-16 w formacie binarnym, ale myślę, że najbezpieczniej jest używać 7-bitowych znaków ASCII tylko w kodzie źródłowym i używaćNSLocalizedString
.źródło
Myślę, że wasze akcentowane postacie odrzucają rzeczy; nie będą obsługiwane przez -stringByAddingPercentEscapesUsingEncoding :.
źródło
NSURL URLWithString: @ "" zwróci wartość nil, jeśli adres URL nie jest zgodny ze specyfikacją RFC 2396 i musi zawierać znaki zmiany znaczenia
Jeśli przeczytasz rfc2396 w linku, otrzymasz mnóstwo szczegółów
Świetna witryna do sprawdzania, gdzie znajduje się obraźliwy znak, wybierz opcję ścieżki dla adresu URL
http://www.websitedev.de/temp/rfc2396-check.html.gz
źródło
Wywołanie URLWithString: zwróci wartość zerową, jeśli przekazany do niego ciąg jest zniekształcony. Ponieważ NSURL zwraca nil dla źle sformułowanych adresów URL, NSLoguj swój ciąg i ustaw punkty przerwania, aby zobaczyć dokładnie, co jest przesyłane do metody tworzenia NSURL. Jeśli Twój URLWithString działa z wartością zakodowaną na stałe, jest to kolejny dowód na to, że cokolwiek przekazujesz, jest źle sformułowane. widzieć
źródło
Możesz użyć nazwy NSURL bezpośrednio, bez NSString.
//.h plik
@interface NewsBrowser : UIViewController { UIWebView *webView; NSURL *NewsUrl; } @property (nonatomic, retain) IBOutlet UIWebView *webView; @property(nonatomic,assign)NSURL *NewsUrl; @end
//.m plik
[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]];
I przekazuję adres URL z innego widoku (używając zmiennej NewsUrl) do tego widoku.
Spróbuj.
źródło