2013-05-11 22 views
11

URL'nin son bölümünü kaldırmaya çalışıyorum, Onun bir FTP URL'si.NSURL'nin son bölümünü kaldır: iOS

Diyelim ki şöyle bir URL var:>ftp://ftp.abc.com/public_html/somefolder/. Son kısmı çıkardıktan sonra ftp://ftp.abc.com/public_html/ olarak almalıyım.

stringByDeletingLastPathComponenet ve URLByDeletingLastPathComponent kullanmayı denedim, ancak son bölümü doğru şekilde kaldırmazlar. URL'nin tüm görünümünü değiştirirler. Örneğin, yukarıda belirtilen yöntemleri kullandıktan sonra, ftp: /ftp.abc.com/public_html/ adresini aldığım URL biçimidir. Programımı çökerten bir "/" in "ftp: //" ifadesini kaldırır.

URL'nin geri kalan kısmını rahatsız etmeden sadece son parçayı nasıl kaldırmak mümkün olur? ftp: /ftp.abc.com/public_html/

+1

'-stringByDeletingLastPathComponent' gerçekten herhangi çift eğik çizgi yoğunlaşacaktır CoreAPI.sqlite. Bunun için belgelerin açık bir şekilde, sadece URL'ler için değil, yalnızca yollara yönelik olduğunu hatırlatıyor! –

+1

'-URLByDeletingLastPathComponent', işini doğru şekilde yapıyor. Eğer yukarıdaki kod örneğinizi “ftp:/ftp.abc.com/public_html /' çıktı olarak görebiliyorum. Eğer giriş benzer şekilde ftp:/ftp.abc.com/public_html/somefolder/' –

+1

Hızlı izleme: OS X 10.6'da (ve muhtemelen iOS 4'te) çıkıyor -URLByDeletingLastPathComponent işlevi, yol bölümündeki çift eğik çizgileri yanlış kullanmaktadır. Böyle bir bileşeni kaldırmaya çalışmak yerine .. ../ yerine eklendiğini bildirmeye çalışıyorum. –

cevap

2

Şimdi

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

Metin alanı aracılığıyla girdiğim dize Bu gerçekten çalışır, ancak URL bir şey olabilir, ne ftp://ftp.abc.com/public_html/somefolder/someOtherFolder/? Bu yöntem, doğru sonuç vermeyecektir. – Shailesh

+0

ohhh .. bence url düzeltildi. sadece bekle –

+0

benim düzenlenmiş cevabımı gör –

17

Hmm -:

GÜNCELLEME: kodunun üzerinde kullanma

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

, ben çıktı alabilirsiniz. URLByDeletingLastPathComponent, yukarıdaki girdileri dikkate alarak mükemmel bir şekilde çalışır.

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

döner

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

Eğer yanlış sonuçlar veren bazı örnek kodlar var mı? Maksimum

+1

@Max: Lütfen Sortamda Güncellemeyi kontrol edin. – Shailesh

+1

Maalesef, sahip olduğunuz hatayı yineleyemiyorum. Dize girişinin bozuk olması mümkün mü? – mxweas

+1

@Max: Emin değilim ama, TextFields'ın girdisini veriyorum. – Shailesh

1

NSURL son bölümünü ayıklamak için nasıl bir örnek deneyin. Bu durumda dosyanın konumu. Bu kod bana dosyasının adını döndürür

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]]; 

SQLite çekirdek veri