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