2011-11-12 7 views
7

RISOLTO (Grazie Regexident)File Nome NSString aggiunge inutili% 20 nello spazio

Ho un app che passa il percorso del file di un PDF a un metodo init personalizzato -(id)init. Si aggiunge al tavolo e quando è selezionata, chiama l'istruzione else per un file inesistente:

- (void) gridView:(AQGridView *)gridView didSelectItemAtIndex:(NSUInteger)index { 

NSLog (@"Selected theArgument=%d\n", index); 

UIViewController *viewController = [[[UIViewController alloc]init]autorelease]; 
{ 
    //if file is built-in, read from the bundle 
    if (index <= 3) 
    { 
     // first section is our build-in documents 
     NSString *fileURLs = [_documentIconsURLs objectAtIndex:index]; 
     NSLog(@"file url -%@", fileURLs); 
     viewController = [[[xSheetMusicViewController alloc]initWithContentURL:fileURLs]autorelease]; 
    } 
    //if file is external, read from URL 
    else 
    { 
     // second section is the contents of the Documents folder 
     NSString *fileURL = [_documentIconsURLs objectAtIndex:index]; 
     NSLog(@"file url -%@", fileURL); 
     NSString *path; 
     NSString *documentsDirectoryPath = [self applicationDocumentsDirectory]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     path = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileURL]; 


     if ([[NSFileManager defaultManager] fileExistsAtPath:documentsDirectoryPath]) 
     { 
      viewController = [[[xSheetMusicViewController alloc]initWithDocumentURL:fileURL]autorelease]; 
     } 
     else 
     { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure!"               message:@"The Selected File Does Not Exist" 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles: nil]; 
      [alert show]; 
      [alert release];   
      return; 
     } 
    } 
[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[UIView beginAnimations:@"animation" context:nil]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.navigationController.view cache:YES]; 
[self.navigationController pushViewController:viewController animated:NO]; 
[UIView commitAnimations]; 
    } 
} 

Così ogni volta che ho un documento senza spazio nel suo nome, si spinge e INIT. Ma quando il nome del file ha uno spazio, dice che non esiste. E quando rimuovo il metodo if-else, è init, ma si blocca perché il file non esiste. Ho provato a sostituire il% 20 nel percorso del file con uno spazio regolare, ma il metodo continua a chiamare la parte else.

Quindi, il percorso del file non è standardizzato e leggibile, oppure il mio altro metodo è sbagliato?

+0

Giudicando dal "% 20" e dalla denominazione della variabile ("... URL") nel codice, sembra che tu stia confondendo gli URL dei file (codifica gli spazi come "% 20", ecc.) Con i percorsi dei file (utilizza spazi, eccetera). – Regexident

+0

l'url del file viene convertito in una stringa in un metodo apple dall'esempio documentInteraction. L'url viene passato a un controller non-DI. Quindi, come lo aggiusto? – CodaFi

risposta

16

Come il vostro percorso sembra essere una percentuale sfuggito stringa di percorso mi piacerebbe provare questo:

[fileURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

E mi piacerebbe rinominare fileURL-fileURLString a chiarire che si tratta di un NSString contenente un percorso URL, non un NSURL effettivo (che il nome della variabile potrebbe implicare falsamente).

Ma vorrei controllare il codice che popola _documentIconsURLs, poiché è probabilmente all'origine del problema.

+0

Bel tentativo! Ma il tuo precedente suggerimento era giusto. Stavo chiamando [filename lastpathcomponent] invece di [nome percorso file]; Comunque continuerò a votarti. Grazie. – CodaFi

Problemi correlati