Ошибка основы в компоненте stringbyappendingpath?

#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: хотя, похоже, работает нормально.