2015-04-19 2 views
-1

У меня есть NSString, который указывает на URL, что-то вроде этого:Objective-C подстроку с диапазоном

https://.../uploads/video/video_file/115/spin_37.mp4 

Я хочу, чтобы получить имя файла в мое приложение IOS от NSString (в данном примере, spin_37. mp4)

пытаюсь следующее:

NSUInteger *startIndex = [self.videoURL rangeOfString:@"/" options:NSBackwardsSearch].location+1; 
NSUInteger *endIndex = [self.videoURL length] - startIndex; 

NSString *fileName = [self.videoURL substringWithRange:(startIndex, endIndex)]; 

Но я бегу в много ошибок с NSUInteger, а именно сейчас

Invalid operands to binary expression ('unsigned long' and 'NSUInteger *' (aka 'unsigned long *')) 

Может кто-нибудь объяснить, что я делаю неправильно?

+0

Как вы думаете, clares: 'NSUInteger * startIndex' ??? –

ответ

5

Вы всегда можете использовать NSString's lastPathComponent API, который возьмет NSString с «https://.../uploads/video/video_file/115/spin_37.mp4» и возвращает «spin_37.mp4» вам.

+0

Это именно то, что мне нужно - спасибо! Я отвечу на ответ через 10 минут, когда смогу. – scientiffic

0

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

NSString *pathString = @"https://.../uploads/video/video_file/115/spin_37.mp4"; 
NSString *fileName = [pathString lastPathComponent]; 
NSLog(@"fileName: %@", fileName); 

Консоль вывода:

2015-04-19 17:04:25.992 MapTest[43165:952142] fileName: spin_37.mp4 
(lldb) 
1

Майкл уже дал вам хороший способ добиться того, что вы хотели бы сделать. Однако, что касается вашего вопроса, есть несколько вещей, которые вы делаете неправильно, которые мешают вам скомпилировать код, который вы написали. Прежде всего, вы объявляете неверные указатели на объекты NSUInteger; ни NSRange.location (первая строка), ни -length (вторая строка) возвращает указатель, поэтому ваши первые две строки должны объявлять регулярные NSUInteger s. Во-вторых, ваша вторая строка должна вычислять длину подстроки, а не конечный индекс (как это требует NSRange. Наконец, ваша последняя строка пытается передать два целочисленных значения вместо NSRange, что и есть метод -substringWithRange: . принимает в качестве аргумента Для компиляции, код должен поэтому прочитать:

NSUInteger startIndex = [self.videoURL rangeOfString:@"/" 
    options:NSBackwardsSearch].location+1; 
NSUInteger length = [self.videoURL length] - startIndex - 1; 

NSString *fileName = [self.videoURL substringWithRange:NSMakeRange(startIndex, length)]; 

Однако, используя NSString «ы -lastPathComponent метод, как Майкл уже предложил, вероятно, дает более чистое решение проблемы, как в этой ситуации вам не кажется нужен более мелкозернистый контроль, который NSRange с.

+0

спасибо за четкое объяснение! – scientiffic