[英]Objective-C Substring with range
我有一个指向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 *'))
有人可以解释我在做什么错吗?
您始终可以只使用NSString的lastPathComponent
API ,该API将使用带有“ https://.../uploads/video/video_file/115/spin_37.mp4
”的NSString并返回“ spin_37.mp4
”给您。
迈克尔已经为您提供了一种实现所需目标的好方法。 但是,关于您的问题,有一些您做错了的事情,这些事情使您无法编译所编写的代码。 首先,您声明了指向NSUInteger对象的错误指针; 既不NSRange.location
(第一行),也不-length
(第二线)返回一个指针,所以第一个两行应该宣告定期NSUInteger
秒。 第二,第二行应该计算子字符串的长度,而不是结束索引(因为这是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
提供的更细粒度的控件。
您应该使用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.