NSURL должен анализировать недействительные URL? - PullRequest
1 голос
/ 12 августа 2010

Я не мог найти это в документации.

Я пишу несколько юнит-тестов, и один из тестов, который должен быть неудачным, - [NSURL URLWithString: @"cow"] Потому что cow не является действительным URL.

Тем не менее, он счастливо анализируется NSURL без каких-либо ошибок. Он не возвращает nil и не создает исключение. Вызов [url absoluteString] превращает его обратно в @"cow".

Что здесь происходит? NSURL действительно должно позволять это?

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

NSURL разрешает относительные URL, которые будут включать "корову".

Общая форма URI, приведенная в RFC 2396, допускает относительные ссылки:

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
rel_path      = rel_segment [ abs_path ]
rel_segment   = 1*( unreserved | escaped |
                      ";" | "@" | "&" | "=" | "+" | "$" | "," )

Если я не перечитываю ужасно, это означает, что любая последовательность допустимых символов может сформировать правильный относительный URL.

0 голосов
/ 12 августа 2010

Из документации для + URLWithString:

Строка для инициализации объект NSURL. Должен соответствовать RFC 2396. Этот метод анализирует URLString в соответствии с RFC 1738 и 1808. ... Если строка была искажена, возвращает ноль.

Не очень хорошо знаком с RFC 2396, я не могу сказать наверняка, но я думаю, что у вас должен быть минимум протокола и хоста (даже если сам домен перенаправляется на хост). Я бы, конечно, ожидал ноль.

Если вы не получите «ноль», передав @ «корову», вы должны сообщить об ошибке на bugreporter.apple.com. Вы можете назвать это «Не коровь».

...