URLWithString: возвращает nil
это может быть очень просто, но я не понимаю, почему URLWithString:
возвращает нуль здесь.
//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];
Ответы
Ответ 1
Вам также нужно избегать символов, отличных от 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];
Вероятно, вы можете удалить экранирование имени localisationName, поскольку оно будет обработано экранированием всей строки.
Ответ 2
Используйте эту функцию, если вы имеете дело с файлом, сохраненным в диспетчере файлов.
NSURL *_url = [NSURL fileURLWithPath:path];
Ответ 3
Думаю, вам нужно использовать -[NSString stringByAddingPercentEscapesUsingEncoding:]
. См. Apple doc.
Еще один комментарий заключается в том, что, как старый таймер, мне немного сложно помещать символы не ASCII в исходный файл.
Тем не менее, этот Apple doc говорит, начиная с 10.4, строки UTF-16 в порядке внутри @"..."
.
Как-то GCC, кажется, правильно конвертирует исходный файл в Latin-1 в UTF-16 в двоичном формате, но я считаю, что он безопасен для использования
7-разрядные символы ASCII только внутри исходного кода и используйте NSLocalizedString
.
Ответ 4
Я думаю, что ваши акцентированные персонажи бросают вещи; они не будут обрабатываться -stringByAddingPercentEscapesUsingEncoding:.
Ответ 5
NSURL URLWithString: @"" будет возвращать нуль, если URL-адрес не соответствует RFC 2396, и они должны быть экранированы
Если вы прочитаете rfc2396 в ссылке, вы получите массу деталей
Отличный сайт, который я нашел для проверки, где находится нарушитель, выберите путь для URL
http://www.websitedev.de/temp/rfc2396-check.html.gz
Ответ 6
URLWithString: вызов вернет нуль, если строка, переданная ему, неверна.
Поскольку NSURL возвращает nil для искаженных URL-адресов, NSLog вашей строки и установите точки останова, чтобы точно увидеть, что передается вашему методу создания NSURL. Если ваш URLWithString работает с жестко закодированным значением, это еще раз доказывает, что все, что вы проходите, неверно. см.
Ответ 7
Вы можете использовать NSURL напрямую без NSString.
//. h файл
@interface NewsBrowser : UIViewController {
UIWebView *webView;
NSURL *NewsUrl;
}
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property(nonatomic,assign)NSURL *NewsUrl;
@end
//. m file
[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]];
И я передаю URL из другого представления (используя переменную NewsUrl) в это представление.
Попробуйте.