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í.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top