-1

次のような 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 *'))

誰かが私が間違っていることを説明できますか?

4

3 に答える 3

5

" "を含む NSString を取り、" " を返すNSString のlastPathComponentAPIをいつでも使用できます。https://.../uploads/video/video_file/115/spin_37.mp4spin_37.mp4

于 2015-04-19T13:58:56.253 に答える
1

マイケルは、あなたがやりたいことを達成するための良い方法をすでに教えてくれています。ただし、あなたの質問に関しては、あなたが書いたコードをコンパイルすることを妨げているいくつかの間違いがあります。まず第一に、NSUInteger オブジェクトへの間違ったポインターを宣言しています。NSRange.location(1 行目) も( 2 行目) もポインターを返さないため、最初の 2 行で通常の s-lengthを宣言する必要があります。NSUInteger次に、2 行目では、終了インデックスではなく、部分文字列の長さを計算する必要があります (これは が必要とするNSRangeためです。最後に、最後の行は の代わりに 2 つの整数値を渡そうとしています。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)];

ただし、 Michael が既に提案したようにNSString's-lastPathComponentメソッドを使用すると、この状況では s が提供するより細かい制御が必要ないように思われるため、おそらく問題に対するよりクリーンな解決策がNSRange得られます。

于 2015-04-19T14:09:46.443 に答える
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)
于 2015-04-19T14:02:54.050 に答える