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) в это представление.

Попробуйте.