2013-05-11 15 views
11

URLの最後の部分だけを削除しようとしています。そのFTP URLです。NSURLの最後の部分を削除します。iOS

たとえば、私は>ftp://ftp.abc.com/public_html/somefolder/のようなURLを持っています。最後の部分を削除した後、私はそれを持っているはずです:ftp://ftp.abc.com/public_html/

私はstringByDeletingLastPathComponenetURLByDeletingLastPathComponentを使ってみましたが、最後の部分を正しく削除しませんでした。彼らはURLの全体の外観を変更します。

たとえば、上記の方法を使用した後、私はftp:/ftp.abc.com/public_html/というURL形式を使用します。私のプログラムをクラッシュさせている "ftp://"中の "/"を削除します。

URLの残りの部分を乱すことなく、最後の部分だけをどのように削除することができますか?

UPDATE:上記のコード使用

NSURL * stringUrl = [NSURL URLWithString:string]; 
NSURL * urlByRemovingLastComponent = [stringUrl URLByDeletingLastPathComponent]; 
NSLog(@"%@", urlByRemovingLastComponent); 

、私はのような出力を得る: - FTP:/ftp.abc.com/public_html/

+1

'-stringByDeletingLastPathComponent'は、実際には任意のダブルスラッシュを凝縮します。それについてのドキュメントは明示的に、パスではなく、URLではないことを明示しています。 –

+1

'-URLByDeletingLastPathComponent'は正しく動作します。上記のコードサンプルが 'ftp:/ ftp.abc.com/public_html /'を出力するのは、入力が同様に 'ftp:/ ftp.abc.com/public_html/somefolder /'のような形式であった場合のみです –

+1

クイックフォローアップ:OS X 10.6(とおそらくiOS 4)の '-URLByDeletingLastPathComponent'は、パス部分の二重スラッシュを誤って処理します。そのようなコンポーネントを削除しようとすると、代わりに '../'が追加されます –

答えて

2

は今

NSString* filePath = @"ftp://ftp.abc.com/public_html/somefolder/."; 

    NSArray* pathComponents = [filePath pathComponents]; 
    NSLog(@"\n\npath=%@",pathComponents); 
    if ([pathComponents count] > 2) { 
      NSArray* lastTwoArray = [pathComponents subarrayWithRange:NSMakeRange([pathComponents count]-2,2)]; 
      NSString* lastTwoPath = [NSString pathWithComponents:lastTwoArray]; 
      NSLog(@"\n\nlastTwoArray=%@",lastTwoPath); 

      NSArray *listItems = [filePath componentsSeparatedByString:lastTwoPath]; 
      NSLog(@"\n\nlist item 0=%@",[listItems objectAtIndex:0]); 

    } 


output 

path=(
     "ftp:", 
     "ftp.abc.com", 
     "public_html", 
     somefolder, 
     "." 
    ) 

lastTwoArray =somefolder/. 

list item 0 =ftp://ftp.abc.com/public_html/ 
+0

これは実際に動作しますが、URLは何でもかまいません ftp://ftp.abc.com/public_html/somefolder/someOtherFolder/? この方法では正しい結果が得られません。 – Shailesh

+0

ohhh ..私はURLが修正されたと思う。ちょうど待つ –

+0

私の編集された答えを参照してください –

17

うーん。 URLByDeletingLastPathComponentは上記の入力があれば完全に動作します。

NSURL *url = [NSURL URLWithString:@"ftp://ftp.abc.com/public_html/somefolder/"]; 
NSLog(@"%@", [url URLByDeletingLastPathComponent]); 

戻り

ftp://ftp.abc.com/public_html/ 

あなたは不適切な結果が得られているいくつかのサンプルコードをお持ちですか?マックス

+1

@マックス:私の質問の更新を確認してください。 – Shailesh

+1

残念ながら、あなたが持っているバグを再現することはできません。文字列入力が不正である可能性はありますか? – mxweas

+1

@Max:わかりませんが、私はTextFieldsからの入力を提供しています。 – Shailesh

1

にNSURLの最後の部分を抽出する方法の例を試してみてください。この場合、ファイルの場所。 sqliteのコアデータ

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreAPI.sqlite"]; 

NSString *localPath = [storeURL absoluteString]; 

NSArray* pathComponents = [localPath pathComponents]; 

NSLog(@"%@",[pathComponents objectAtIndex:6]); 

NSString * nombre = [NSString stringWithFormat:@"%@", [pathComponents objectAtIndex:6]]; 

このコードは、私のファイルの名前を返しますCoreAPI.sqlite

関連する問題