2013-05-11 6 views
11

Sto tentando di rimuovere solo l'ultima parte dell'URL, È un URL FTP.Rimuovi l'ultima porzione di NSURL: iOS

Supponiamo, Ho un URL come:>ftp://ftp.abc.com/public_html/somefolder/. Dopo aver rimosso l'ultima porzione dovrei averlo come: ftp://ftp.abc.com/public_html/.

Ho provato a utilizzare stringByDeletingLastPathComponenet e URLByDeletingLastPathComponent, ma non rimuovono correttamente l'ultima porzione. Cambiano l'intero aspetto dell'URL.

per esempio, dopo aver usato i metodi sopra indicati, ecco il formato URL ottengo ftp: /ftp.abc.com/public_html/. Rimuove uno "/" in "ftp: //", che sta bloccando il mio programma.

Come è possibile rimuovere solo l'ultima parte senza disturbare il resto dell'URL?

UPDATE:

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

Utilizzando sopra il codice, ottengo l'uscita come: - ftp: /ftp.abc.com/public_html/

+1

'-stringByDeletingLastPathComponent' sarà infatti condensare eventuali doppie barre. La documentazione per questo fa esplicitamente notare che è destinato solo per i percorsi, e non per gli URL, però! –

+1

'-URLByDeletingLastPathComponent' funziona correttamente. L'unico che posso vedere per il tuo esempio di codice precedente per l'output di 'ftp:/ftp.abc.com/public_html /' è se l'input fosse malformato in modo simile a qualcosa come 'ftp:/ftp.abc.com/public_html/somefolder /' –

+1

Seguito rapido: si verifica su OS X 10.6 (e presumibilmente su iOS 4) '-URLByDeletingLastPathComponent' gestisce erroneamente le doppie barre nella porzione del percorso. Cercando di rimuovere un componente di questo tipo, si aggiunge invece '../' –

risposta

2

Ora provare

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

Questo funziona davvero, ma l'URL può essere qualsiasi cosa, Cosa succede se è ftp://ftp.abc.com/public_html/somefolder/someOtherFolder/? Questo metodo non darà risultati corretti. – Shailesh

+0

ohhh .. penso che l'URL sia corretto. basta aspettare –

+0

vedere la mia risposta modificata –

17

Hmm. URLByDeletingLastPathComponent funziona perfettamente dato l'input di cui sopra.

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

rendimenti

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

Avete qualche codice di esempio che sta dando risultati non corretti?

Max

+1

@Max: Si prega di controllare l'aggiornamento nella mia domanda. – Shailesh

+1

Purtroppo, non riesco a replicare il bug che stai riscontrando. È possibile che l'input della stringa non sia corretto? – mxweas

+1

@Max: non sono sicuro, ma sto fornendo l'input da TextFields. – Shailesh

1

Un esempio di come estrarre l'ultima parte del NSURL. In questo caso la posizione del file. dati fondamentali 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]]; 

Questo codice mi restituisce il nome del file CoreAPI.sqlite