2013-05-11 3 views
11

Я пытаюсь удалить только последнюю часть URL-адреса, его URL-адрес FTP.Удалить последнюю часть NSURL: iOS

Предположим, у меня есть URL-адрес:>ftp://ftp.abc.com/public_html/somefolder/. После удаления последней части я должен иметь ее как: ftp://ftp.abc.com/public_html/.

Я пробовал использовать stringByDeletingLastPathComponenet и URLByDeletingLastPathComponent, но они не удаляют последнюю часть правильно. Они меняют весь внешний вид URL-адреса.

например, после использования вышеуказанных методов, вот формат URL, который я получаю ftp: /ftp.abc.com/public_html/. Он удаляет один «/» в «ftp: //», что приводит к сбою моей программы.

Как можно удалить только последнюю часть, не нарушая остальную часть URL-адреса?

UPDATE:

NSURL * stringUrl = [NSURL URLWithString:string]; 
NSURL * urlByRemovingLastComponent = [stringUrl URLByDeletingLastPathComponent]; 
NSLog(@"%@", urlByRemovingLastComponent); 

Используя выше код, я получаю выход, как: - FTP: /ftp.abc.com/public_html/

+1

'-stringByDeletingLastPathComponent' действительно конденсируются любые двойные слеши. В документации для него явно указано, что он предназначен только для путей, а не для URL-адресов! –

+1

'-URLByDeletingLastPathComponent' выполняет свою работу должным образом. Единственное, что я вижу для вашего вышеприведенного образца кода для вывода 'ftp:/ftp.abc.com/public_html /', - это то, что вход аналогично искажен как нечто вроде 'ftp:/ftp.abc.com/public_html/somefolder /' –

+1

Быстрое наблюдение: получается на OS X 10.6 (и, предположительно, iOS 4) '-URLByDeletingLastPathComponent' пропускает двойные слэши в части пути. Попытка удалить такой компонент приводит к добавлению «../» –

ответ

2

Теперь попробуйте

NSString* filePath = @"ftp://ftp.abc.com/public_html/somefolder/."; 

    NSArray* pathComponents = [filePath pathComponents]; 
    NSLog(@"\n\npath=%@",pathComponents); 
    if ([pathComponents count] > 2) { 
      NSArray* lastTwoArray = [pathComponents subarrayWithRange:NSMakeRange([pathComponents count]-2,2)]; 
      NSString* lastTwoPath = [NSString pathWithComponents:lastTwoArray]; 
      NSLog(@"\n\nlastTwoArray=%@",lastTwoPath); 

      NSArray *listItems = [filePath componentsSeparatedByString:lastTwoPath]; 
      NSLog(@"\n\nlist item 0=%@",[listItems objectAtIndex:0]); 

    } 


output 

path=(
     "ftp:", 
     "ftp.abc.com", 
     "public_html", 
     somefolder, 
     "." 
    ) 

lastTwoArray =somefolder/. 

list item 0 =ftp://ftp.abc.com/public_html/ 
+0

Это действительно работает, но URL-адрес может быть чем угодно. Что, если это ftp://ftp.abc.com/public_html/somefolder/someOtherFolder/? Этот метод не даст правильных результатов. – Shailesh

+0

ohhh .. Я думаю, что URL исправлен. просто жди –

+0

см. мой отредактированный ответ –

17

Хм. URLByDeletingLastPathComponent отлично работает с учетом указанного выше ввода.

NSURL *url = [NSURL URLWithString:@"ftp://ftp.abc.com/public_html/somefolder/"]; 
NSLog(@"%@", [url URLByDeletingLastPathComponent]); 

возвращает

ftp://ftp.abc.com/public_html/ 

У вас есть пример кода, который приносит неправильные результаты?

Макс

+1

@Max: Пожалуйста, проверьте Обновление в моем вопросе. – Shailesh

+1

К сожалению, я не могу воспроизвести ошибку, с которой вы сталкиваетесь. Возможно ли, что ввод строки искажен? – mxweas

+1

@Max: Я не уверен, но я предоставляю входные данные из TextFields. – Shailesh

1

Пример того, как извлечь последнюю часть NSURL. В этом случае местоположение файла. Sqlite основные данные

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreAPI.sqlite"]; 

NSString *localPath = [storeURL absoluteString]; 

NSArray* pathComponents = [localPath pathComponents]; 

NSLog(@"%@",[pathComponents objectAtIndex:6]); 

NSString * nombre = [NSString stringWithFormat:@"%@", [pathComponents objectAtIndex:6]]; 

Этот код возвращает мне имя файла CoreAPI.sqlite

Смежные вопросы