Objective-C具有范围的子串

时间:2015-04-19 13:56:14

标签: ios objective-c substring nsuinteger

我有一个指向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 *'))

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

3 个答案:

答案 0 :(得分:5)

你总是可以使用NSString's lastPathComponent API来获取带有" https://.../uploads/video/video_file/115/spin_37.mp4"的NSString。并返回" spin_37.mp4"给你。

答案 1 :(得分:1)

迈克尔已经为你提供了一个很好的方法来实现你想做的事情。但是,关于你的问题,有一些你做错的事情阻碍了你编写你编写的代码。首先,您要声明指向NSUInteger对象的错误指针; 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)