繁体   English   中英

带范围的Objective-C子字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM