2011-11-12 15 views
7

SOLUCIONADO (Gracias Regexident)Nombre de archivo NSString añade% innecesaria en el espacio 20

Tengo una aplicación que pasa la ruta del archivo de un PDF a un método init encargo -(id)init. Se agrega a la tabla y cuando se selecciona, llama a la sentencia else para un archivo inexistente:

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

Así que cada vez que tengo un documento sin espacio en su nombre, que empuja y ensu. Pero cuando el nombre del archivo tiene un espacio, dice que no existe. Y cuando elimino el método if-else, es init, pero se cuelga porque el archivo no existe. Intenté reemplazar el% 20 en la ruta del archivo con un espacio común, pero el método continúa llamando a la parte else.

Entonces, ¿la ruta del archivo no está estandarizada y es legible, o el método de mi otro es incorrecto?

+0

A juzgar por el "% 20" y la nomenclatura variable ("... URL") en su código, parece que está confundiendo URL de archivos (codifica espacios como "% 20", etc.) con rutas de archivos (usa espacios, etc.) – Regexident

+0

la url del archivo se convierte en una cadena en un método de apple del ejemplo documentInteraction. Sin embargo, la url se pasa a un controlador no DI. Entonces, ¿cómo lo arreglo? – CodaFi

Respuesta

16

medida que su camino parece ser un porcentaje escapó cadena de ruta que iba a tratar esto:

[fileURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

Y me cambio el nombre a fileURLfileURLString para dejar claro que se trata de un NSString que contiene una ruta URL, no una NSURL real (que su nombre de variable implicaría falsamente).

Pero verificaría el código que puebla _documentIconsURLs, ya que es probablemente el origen de su problema.

+0

¡Buen intento! Pero su sugerencia anterior era correcta. Estaba llamando [filename lastpathcomponent] en lugar de [filename path]; Aun así te votaré. Gracias. – CodaFi

Cuestiones relacionadas