UIImage no se carga pero el archivo está ahí
-
06-07-2019 - |
Pregunta
Parece que no puedo cargar una imagen, pero estoy seguro de que está en la ruta que especifico.
Aquí está el código que intenta cargar la imagen:
- (UIImage*) CPPlistImageToUIImage: (NSString *) CPPlistImage { /*TODO: Is this a memory leak? Find out*/ UIImage * ret = [UIImage imageNamed: CPPlistImage]; if(ret == nil){ RDLogString(@"Warning: Failed to load image: \"%@\"", CPPlistImage); } return ret; }
Y aquí hay una función que enumera todos los archivos en el directorio donde se ve esta función:
- (void) lsOwnDirectory { NSError * error = [[NSError alloc] init]; NSArray * files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath: pathToOwnDirectory error: &error]; for(NSString * file in files){ RDLogString(@"%@", file); } }
Y aquí hay una muestra de la salida de ambas funciones en la misma ejecución:
// CPPlist...Image telling he can't find/load the image 2009-11-29 02:12:51.510 CPPlayer[6452:207] CPConversation.m:113 Warning: Failed to load image: "/Users/nick/Library/Application Support/iPhone Simulator/User/Applications/D3403591-3A56-4F05-B4C1-C21DAAF918A2/CPPlayer.app/CP.Resources/CP.Conversations/Supermarkt/OIGNONS.png" ... // lsOwnDirectory is called AFTER CPPList...Image 2009-11-29 02:12:51.557 CPPlayer[6452:207] RootViewController.m:81 Contents of /Users/nick/Library/Application Support/iPhone Simulator/User/Applications/D3403591-3A56-4F05-B4C1-C21DAAF918A2/CPPlayer.app/CP.Resources/CP.Conversations/Supermarkt 2009-11-29 02:12:51.566 CPPlayer[6452:207] CPConversation.m:133 audio 2009-11-29 02:12:51.567 CPPlayer[6452:207] CPConversation.m:133 CPConversation.plist 2009-11-29 02:12:51.568 CPPlayer[6452:207] CPConversation.m:133 CPData.sqlite 2009-11-29 02:12:51.569 CPPlayer[6452:207] CPConversation.m:133 images 2009-11-29 02:12:51.570 CPPlayer[6452:207] CPConversation.m:133 OIGNONS.png
No tengo idea de por qué no puede encontrar el archivo. Una función lo ve, la otra no, parecen estar en el mismo directorio ...
Cualquier ayuda, muy apreciada,
Gracias de antemano, Nick
Editar: Olvidé agregar que el código es ejecutado y compilado por xcode para el iPhone OS 3.0. Probablemente lo obtuviste de las etiquetas, pero aún así.
Solución
- [UIImage imageNamed:]
no acepta una ruta completa al archivo de imagen, solo acepta un nombre de archivo y luego busca una imagen con ese nombre de archivo en el paquete principal de la aplicación. Es por eso que devuelve nulo. - [UIImage imageWithContentsOfFile:]
, por otro lado, espera una ruta completa o parcial al archivo. La principal diferencia entre los dos constructores es que imageNamed: almacena en caché la imagen internamente (en un caché privado específico para UIImage), mientras que imageWithContentsOfFile: no almacenará en caché la imagen.
Nota al margen: No, eso no es una pérdida de memoria. Está utilizando un constructor de conveniencia que, de acuerdo con las reglas de administración de memoria para Cocoa, debe devolver un objeto publicado automáticamente que usted no toma a menos que lo conserve explícitamente en otro lugar.