2009-12-31 8 views
17

Esto es lo que estoy haciendo, cuando se crea una imagen con la ruta en el paquete:pathForResource? sin necesidad de utilizar la extensión (Iphone)


UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]]; 

Lo que quiero hacer es tratar de encontrar el camino para mi imagen, pero sin necesidad de utilizar la extensión, sin necesidad de utilizar 'OfType' (porque el nombre de mi imagen y su extensión es tienda en mi base de datos) algo así:


UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.jpg"]]; 

Pero no sé cómo hacerlo.

Saludos,

Respuesta

41

¿Por qué no divide la cadena que obtiene de la base de datos?

NSString* fullFileName = @"image.jpg"; 
NSString* fileName = [[fullFileName lastPathComponent] stringByDeletingPathExtension]; 
NSString* extension = [fullFileName pathExtension]; 

Ahora usted puede utilizar simplemente:

[[NSBundle mainBundle] pathForResource:fileName ofType:extension]]; 
+0

Voy a tratar de que tan pronto como llegue a casa, creo. gracias ~ – ludo

+0

esto funciona muy bien! – rocky

+2

No necesita separar la extensión. Ver mi respuesta Sin embargo, no sé si hay algún impacto en el rendimiento al usar mi enfoque. –

0

La forma más sencilla es almacenar el nombre y tipo de archivo en la base de datos por separado, y recuperarlos utilizando la primera method.I'm no está seguro de que se puede tener éxito en la aplicación de esta última .

+0

estaba thinkinf de eso, pero la creación de una columna en mi base de datos sólo para la extensión no sé si es la mejor manera – ludo

2
- (NSData *)applicationDataFromFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease]; 
    return myData; 
} 

tomado de http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/FilesandNetworking/FilesandNetworking.html#//apple_ref/doc/uid/TP40007072-CH21-SW21

puedan adaptarse con facilidad si querías devolver un UIImage en lugar de un NSData.

Además, no se dice si va a guardar las imágenes en el directorio de documentos, o añadiéndolos a su paquete de aplicación antes de compilar. porque si es el último, puede usar [UIImage imageNamed:(NSString *)filename] para obtener la imagen. Espera una extensión como parte del nombre de archivo.

+0

El archivo se está agregando antes de la compilación. gracias por la respuesta – ludo

0

Descubrí que con una extensión de ".jpg" era necesario utilizar el tipo de la extensión para que la aplicación funcionara en un iPod Touch, mientras que con una extensión de ".png" podía poner "imagen". png "en pathForResource y decir ofType: nil. Pero todas las versiones funcionaron en el simulador.

El paquete de aplicación contiene el archivo de imagen, y estoy usando:

[[NSBundle mainBundle] pathForResource:@"Auto" ofType:@"jpg"] 

para obtener una ruta.

20

que pueda usar el método NSBundle sin pasar a la extensión, sólo tiene que pasar nula para la extensión.

[[NSBundle mainBundle] pathForResource:@"image.jpg" ofType:nil]; 
+1

Esta debería ser la excepción en mi humilde opinión, ya que es más elegante y al grano. No estoy seguro de por qué Apple insiste en separar la extensión. – TalL

Cuestiones relacionadas