-1

我有一个指向 URL 的 NSString,如下所示:

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

我想从 NSString 获取我的 iOS 应用程序中的文件名(在本例中为 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 *'))

有人可以解释我做错了什么吗?

4

3 回答 3

5

你总是可以只使用NSString 的lastPathComponentAPI,它将一个带有 " https://.../uploads/video/video_file/115/spin_37.mp4" 的 NSString 并返回 " spin_37.mp4" 给你。

于 2015-04-19T13:58:56.253 回答
1

迈克尔已经给了你一个很好的方法来实现你想做的事情。但是,至于您的问题,您做错了一些事情,这使您无法编译您编写的代码。首先,您声明了指向 NSUInteger 对象的错误指针;NSRange.location(第一行)和(第二行)都没有-length返回指针,所以你的前两行应该声明常规NSUIntegers。其次,您的第二行应该计算子字符串的长度,而不是结束索引(因为这是 an 所NSRange要求的。最后,您的最后一行试图传递两个整数值而不是 a 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

于 2015-04-19T14:09:46.443 回答
0

你应该使用NSString 的lastPathComponent方法:

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)
于 2015-04-19T14:02:54.050 回答