#cocoa #cocoa-touch #url #foundation
#cocoa #cocoa-touch #url #основа
Вопрос:
Я попробовал следующую строку в приложении iOS и в инструменте Foundation:
[@"http://www.apple.com/" stringByAppendingPathComponent:@"/"]
Каждый раз, когда я получаю результат:
@"http:/www.apple.com"
Другими словами, stringByAppendingPathComponent
, в дополнение к тому, что ничего не добавляется (чего я ожидал), проглатывается последнее /
(что можно было бы считать вроде как нормальным), и проглатывается одна из схем URL /
, которая совершенно не подходит в моей книге.
Это происходит только со мной? Я пропустил что-то глупое, прежде чем отправить отчет об ошибке?
Ответ №1:
Прежде всего, обратите внимание на документацию для stringByAppendingPathComponent:
:
Обратите внимание, что этот метод работает только с путями к файлам (не, например, со строковыми представлениями URL-адресов).
Итак, вы используете метод для случая, который он не предназначен для поддержки.
Использование его с путем к файлу показывает то же поведение, хотя:
[@"/abc/" stringByAppendingPathComponent:@"/"]; // -> @"/abc"
[@"/abc/" stringByAppendingPathComponent:@"/def/"]; // -> @"/abc/def"
Таким образом, метод, похоже, всегда предпочитает пути, которые не заканчиваются завершающей косой чертой, независимо от того, была ли косая черта частью исходного пути или аргумента. Хотя я не знаю, назвал бы я это ошибкой. В конце концов, оба /abc
и /abc/
указывают один и тот же элемент в файловой системе, не так ли?
Но, похоже, точное поведение могло бы быть задокументировано лучше.
Комментарии:
1. arf, я не видел примечания в документации. Хорошо, это не ошибка. виноват. Спасибо.
2. Это тоже сбой:
[[NSURL URLWithString:@"http://www.apple.com"] URLByAppendingPathComponent:@"/"]
. Оно возвращаетhttp://www.apple.com///
.URLWithString:relativeToURL:
хотя, похоже, работает нормально.