簡體   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