Пробелы в NSURL с переменными не загружаются - PullRequest
2 голосов
/ 01 мая 2011

Привет всем, у меня есть дилемма объективной цели c: P Я довольно новичок в объективной цели c, и я попытался найти ответ, но безрезультатно.

Итак, вот моя ситуация.Я поместу код здесь сейчас, иначе он не будет иметь особого смысла.Я пишу то, что мне нужно, этот код не работает прямо сейчас, и я выясню, почему позже

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM"];
NSString *monthString = [formatter stringFromDate:date];
NSLog(@"MONTH STRING %@", monthString);
NSString *baseURLStr = @"http://www.mysite.ca/example";
NSURL *url = [NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"announcements%20%@%20%d%20carson.ashx", monthString]];

[webView loadRequest:[NSURLRequest requestWithURL:url]];
[NSCalendar release];

Итак, вот в чем проблема ... Encoded (HTML): stringByAppendingFormat:@ "announcements% @% 20% d% 20example.ashx", monthString, day]];

Расшифровано это выглядит так

stringByAppendingFormat: @ "announcements% @% d example.ashx"]];

Это должно быть проще для понимания. Когда я запускаю% 20, он говорит:" Запрошенный документ не найден "Когда я запускаю с пробелами (" "), он просто белый,и ничего не загружается.

Я знаю, что URL-адрес правильный, и если я уберу переменные, это точно такая же проблема, но когда я перемещаю% 20 обратно в baseURLStr, он работает и загружается очень хорошотак что это как-то связано с кодами HTML и строкой "stringbyAppendingFormat".

Любая помощь приветствуется!

Спасибо за ваше время

-Kyle

Ответы [ 4 ]

8 голосов
/ 01 мая 2011

всякий раз, когда NSURL возвращает nil (0x0) после init, это почти всегда связано с неправильной строкой url.И очень требователен к получению правильно отформатированной строки.

Я рекомендую просто создать вашу строку без каких-либо escape-кодировок или URL-кодирования, а затем просто вызвать

myUrlString = [myUrlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

, вот объявление заголовкадля этого

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc NS_AVAILABLE(10_3, 2_0);

таким образом, я всегда знаю, что отформатировал его так, как этого хочет класс NSURL.

вот пример

NSString *sUrl = @"http://www.myside.ca/example/announcements carson.ashx"; //notice the embedded space
sUrl = [sUrl stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *url = [NSURL URLWithString:sUrl];
0 голосов
/ 01 мая 2011

Если вы не используете форматы в стиле printf, не используйте stringByAppendingFormat:. Вместо этого используйте stringByAppendingString:.

Во-вторых, действительно ли итоговый URL должен быть http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx? Или в середине должен быть слеш: http://www.myside.ca/example<b>/</b>announcements%20%@%20%d%20carson.ashx?

Кроме того, http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx является недействительным URL. Знаки процента, которые не являются частью escape (например, не являются частью %20), должны быть закодированы как %25. Технически, @ также следует экранировать (как %40), но IIRC NSURL позволит этому скользить.

0 голосов
/ 01 мая 2011

Возможно, вам просто нужно закодировать знаки процента. Попробуйте: stringByAppendingFormat:@"announcements%%20%@%%20%d%%20carson.ashx"]

0 голосов
/ 01 мая 2011

Если я правильно вас понимаю, вы пытаетесь сгенерировать строку с буквенным "% 20", встроенным в нее.Символ "%" является особенным в строках формата.Если вы хотите вставить буквальный символ процента, вам нужно экранировать его, поставив два последовательных символа «%».Как

[NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"foo%%20bar"]];

Это добавит "foo% 20bar" в конец строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...