перепутан результатом подстроки stringByDeletingLastPathComponent - PullRequest
0 голосов
/ 20 февраля 2019

мой код

NSMutableString *s= (NSMutableString *)[@"http://www.yahoo.com/index.html" stringByDeletingLastPathComponent];

то, что я ожидал от s, равно

http://www.yahoo.com

, но приведенный выше код s:

http:/www.yahoo.com

Ваш комментарий приветствуется

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Аннотация для этого метода поясняется следующим образом: 100

Документ Apple: обратите внимание, что этот метод работает только с путями к файлам (не, например, со строковыми представлениями URL-адресов).

Но ваша строка явно является полным URL-адресом, не относится к пути к файлу, поэтому мы соберем их в URL-адрес, используя URL-классификацию URLByDeletingLastPathComponent для перехвата

NSString *urlString = @"http://www.yahoo.com/index.html";
NSURL* URL = [NSURL URLWithString: urlString];
NSURL* lastPathUrl = [URL URLByDeletingLastPathComponent];
NSString* lastPathString = lastPathUrl.absoluteString;

NSLog(@"---%@---", lastPathString);
0 голосов
/ 20 февраля 2019

Вы должны использовать NSURL, а не NSString:

NSURL *url = [[NSURL URLWithString:@"http://www.yahoo.com/index.html"] URLByDeletingLastPathComponent];

Выход:

http://www.yahoo.com/

Если вы абсолютноЕсли вам нужна строка из этого, вы можете сделать:

NSString *urlString = url.absoluteString;

Или, если вам действительно нужна изменяемая строка, не приводите ее к NSMutableString, но создайте изменяемую копию:

NSMutableString *urlString = [url.absoluteString mutableCopy];

Но, в общем, где это возможно, вы должны придерживаться NSURL при работе с URL.И когда возникает искушение использовать пути к файлам, используйте вместо них URL-адреса файлов.

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