Подтвердить что ты не робот

Чтобы получить имя файла URL-адреса

У меня есть исходный код, чтобы получить имя файла url

например:

http://www.google.com/a.pdf

Я надеюсь получить a.pdf

потому что способ присоединиться к двум NSStrings, которые я могу получить, это "appendString", который только для добавления строки с правой стороны, поэтому я планировал каждый раз пометить каждый char с правой стороны строки < http://www.google.com/a.pdf ', когда он достигнет значения char'/', остановите проверку, верните строку fdp.a, после чего я изменю fdp.a на a.pdf

исходные коды ниже

-(NSMutableString *) getSubStringAfterH :  originalString:(NSString *)s0 
{
    NSInteger i,l;
    l=[s0 length];
    NSMutableString *h=[[NSMutableString alloc] init];

    NSMutableString *ttt=[[NSMutableString alloc] init  ];
     for(i=l-1;i>=0;i--) //check each char one by one from the right side of string 'http://www.google.com/a.pdf', when it reach at the char '/', stop
    {
        ttt=[s0 substringWithRange:NSMakeRange(i, 1)];
         if([ttt isEqualToString:@"/"]) 
        { 
            break;
        }
            else
        {
             [h appendString:ttt];
        } 
     }
     [ttt release];
     NSMutableString *h1=[[[NSMutableString alloc] initWithFormat:@""] autorelease];

    for (i=[h length]-1;i>=0;i--)
    {
            NSMutableString *t1=[[NSMutableString alloc] init ];
        t1=[h substringWithRange:NSMakeRange(i, 1)];
        [h1 appendString:t1];
            [t1 release];
    } 
    [h release];
    return h1;
}

h1 может повторно использовать строку coorect a.pdf, но если она вернется к кодам, где она была вызвана, через некоторое время системные отчеты "двойной свободный *** установить точку останова в malloc_error_break для отладки

Я проверил долгое время и понял, что если я удалю код

ttt = [s0 substringWithRange: NSMakeRange (i, 1)];

все будет ОК (конечно, getSubStringAfterH не может вернуть результат корневого процесса, которого я ожидал.), сообщения об ошибках не сообщаются.

Я пытаюсь исправить ошибку несколько часов, но до сих пор не знаю.

Приветствуем любой комментарий

Спасибо interdev

4b9b3361

Ответ 1

Попробуйте следующее:

Изменить: от комментария комментария

NSString *url = @"http://www.google.com/a.pdf";
NSArray *parts = [url componentsSeparatedByString:@"/"];
NSString *filename = [parts lastObject];

Ответ 2

Следующая строка выполняет задание, если url является NSString:

NSString *filename = [url lastPathComponent];

Если url является NSURL, то выполняется следующее задание:

NSString *filename = [[url path] lastPathComponent];

Ответ 3

Я думаю, что если у вас уже есть объект NSURL, есть метод lastPathComponent, доступный с iOS 4 и далее.

NSURL *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"];
NSString *filename = [url lastPathComponent];

Ответ 4

Это больше ошибок и предназначено для получения локализованного имени в URL-адресе.

NSString *localizedName = nil;
[url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey error:NULL];

Ответ 5

Я еще не пробовал этого, но, похоже, вы пытаетесь сделать это с трудом. У библиотек iPhone есть класс NSURL, и я полагаю, что вы могли просто сделать:

NSString *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"];
NSString *path = [url path];

Определенно искать встроенную функцию. Библиотеки имеют гораздо большее количество тестов и будут обрабатывать граничные случаи лучше, чем все, что вы или я напишем через час или два (вообще говоря).

Ответ 6

Swift 3

Скажем, что ваш url http://www.google.com/a.pdf

    let filename = url.lastPathComponent

    \\filename = "a.pdf"