URLWithString: повертає нуль


93

це може бути дуже просто, але я, здається, не з'ясовую, чому 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
Яке значення webNameдо вашого дзвінка stringWithFormat:? Тоді, яка цінність stringURLперед вашим дзвінком URLWithString:? Використовуйте NSLog()для роздрукування їх крок за кроком або, встановлення точок перерви та перевірте значення, як вони встановлені.
Кевін Коннер,

Відповіді:


203

Вам також потрібно уникнути символів, що не містять ASCII, у вашій URL-адресі з твердим кодом:

//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, оскільки він буде оброблятися екрануванням цілого рядка.


Намагаючись зрозуміти, чому URLWithString дає нуль тут. Документи Apple говорять: "Повинно бути URL-адресою, яка відповідає RFC 2396. Цей метод аналізує URLString відповідно до RFC 1738 та 1808."
Читаю

1
LOL, я скопіював URL-адресу з електронного листа, і це сталося! Дякую.
Ешелон

1
розривається, якщо в URL-адресі є #. stringByAddingPercentEscapesUsingEncodingконвертує # у% 2
Алі Саїд

3
Вище API застарілий. Ви можете використовувати наступний API webStringURL = [stringURL stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
Rushabh

41

Використовуйте цю функцію, якщо ви маєте справу з файлом, збереженим у файловому менеджері.

NSURL *_url = [NSURL fileURLWithPath:path];

СПАСИБІ! Я отримував "обрізану посередині" URL-адресу
codrut

8

Я думаю, вам потрібно скористатися -[NSString stringByAddingPercentEscapesUsingEncoding:]. Див. Документ Apple .

Інший коментар полягає в тому, що мені, як старому таймеру, трохи непросто поміщати символи, що не є ASCII, у вихідний файл. Тим не менш, у цьому документі Apple сказано, починаючи з 10.4, всередині UTF-16 рядки в порядку @"...". Як-то GCC здається, що правильно перетворити вихідний файл з латинської-1 в UTF-16 у двійковій, але я думаю, що найбезпечніше використовувати 7-бітні символи ASCII лише всередині вихідного коду та використовувати NSLocalizedString.


2

Я думаю, що ваші акцентовані персонажі скидають речі; вони не будуть оброблятися -stringByAddingPercentEscapesUsingEncoding :.


2

NSURL URLWithString: @ "" поверне нуль, якщо URL-адреса не відповідає RFC 2396, і їх потрібно захистити

Якщо ви прочитаєте rfc2396 за посиланням, ви отримаєте купу деталей

Чудовий сайт, який я знайшов для перевірки, де знаходиться ображаючий персонаж, виберіть варіант шляху для URL-адреси

http://www.websitedev.de/temp/rfc2396-check.html.gz


0

URLWithString: виклик поверне нуль, якщо рядок, переданий йому, неправильний. Оскільки NSURL повертає нуль для неправильно сформованих URL-адрес, NSLog ваш рядок і встановити точки зупинку, щоб побачити, що саме передається вашому методу створення NSURL. Якщо ваш URLWithString працює із жорстко закодованим значенням, це ще один доказ того, що все, що ви передаєте, неправильне. побачити


-1

Ви можете використовувати NSURL безпосередньо без NSString.

//.h файл

@interface NewsBrowser : UIViewController {

    UIWebView *webView;
    NSURL *NewsUrl;

}

@property (nonatomic, retain) IBOutlet UIWebView *webView;

@property(nonatomic,assign)NSURL *NewsUrl;

@end

//.m файл

[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]];

І я передаю URL-адресу з іншого подання (за допомогою змінної NewsUrl) до цього подання.

Спробуй це.


Ця відповідь взагалі не стосувалася питання, яке запитувало, чому URLWithString: повертає нуль. (Далі, ви навіть не показали спосіб зміни рядка на URL-адресу.)
ArtOfWarfare
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.