我有一个指向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 *'))
有人可以解释我做错了吗?
答案 0 :(得分:5)
你总是可以使用NSString's lastPathComponent
API来获取带有" https://.../uploads/video/video_file/115/spin_37.mp4
"的NSString。并返回" spin_37.mp4
"给你。
答案 1 :(得分:1)
NSRange.location
(第一行)和-length
(第二行)都不返回指针,因此前两行应该声明常规NSUInteger
s。其次,你的第二行应该计算子字符串的长度,而不是结束索引(因为这是NSRange
所需要的。最后,你的最后一行试图传递两个整数值而不是{{1} },这是方法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)];
的{{1}}方法可能会为问题提供更清晰的解决方案,因为在这种情况下,您似乎不需要更精细的控制{ {1}}给予。
答案 2 :(得分: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)