Ответ 1
Попробуйте следующее:
Изменить: от комментария комментария
NSString *url = @"http://www.google.com/a.pdf";
NSArray *parts = [url componentsSeparatedByString:@"/"];
NSString *filename = [parts lastObject];
У меня есть исходный код, чтобы получить имя файла url
например:
Я надеюсь получить 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
Попробуйте следующее:
Изменить: от комментария комментария
NSString *url = @"http://www.google.com/a.pdf";
NSArray *parts = [url componentsSeparatedByString:@"/"];
NSString *filename = [parts lastObject];
Следующая строка выполняет задание, если url является NSString:
NSString *filename = [url lastPathComponent];
Если url является NSURL, то выполняется следующее задание:
NSString *filename = [[url path] lastPathComponent];
Я думаю, что если у вас уже есть объект NSURL
, есть метод lastPathComponent
, доступный с iOS 4 и далее.
NSURL *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"];
NSString *filename = [url lastPathComponent];
Это больше ошибок и предназначено для получения локализованного имени в URL-адресе.
NSString *localizedName = nil;
[url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey error:NULL];
Я еще не пробовал этого, но, похоже, вы пытаетесь сделать это с трудом. У библиотек iPhone есть класс NSURL
, и я полагаю, что вы могли просто сделать:
NSString *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"];
NSString *path = [url path];
Определенно искать встроенную функцию. Библиотеки имеют гораздо большее количество тестов и будут обрабатывать граничные случаи лучше, чем все, что вы или я напишем через час или два (вообще говоря).
Swift 3
Скажем, что ваш url http://www.google.com/a.pdf
let filename = url.lastPathComponent
\\filename = "a.pdf"