UIImage imageWithContentsOfFile: no funciona en iOS8
beta (4)
pathForResource:ofType:
solo busca en la carpeta Recursos (y carpetas localizadas). Si está colocando archivos en carpetas dedicadas en el paquete, entonces necesita usar pathForResource:ofType:inDirectory:
y proporcionar el nombre del directorio.
Cuando pruebo mi aplicación en iOS8 beta3 y beta5, encontré un error acerca de [UIImage imageWithContentsOfFile:].
Cuando los recursos de imagen se almacenan en un sub paquete de un paquete principal, devolverá nulo si inicializamos el UIImage a través del siguiente método:
NSString *testBundlePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"bundle”];
NSBundle *bundle = [NSBundle bundleWithPath:testBundlePath];
NSString *path = [bundle pathForResource:@"play.png" ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:path]; //iOS8 image = nil, iOS7 image != nil
Pero cuando los recursos de imagen se almacenan en el paquete principal, la Inicialización de UIImage se puede realizar con el siguiente método:
NSString *path = [[NSBundle mainBundle] pathForResource:@"play.png" ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:path]; //iOS8 and iOS7 image != nil
Hemos encontrado este problema en iOS8 beta3 y todavía existe en iOS8 beta 5.
The Demo app directory structure was below:
XXX.app
|----test~ipad.bundle
|----play.png
|----test~iphone.bundle
|----play.png
|----play.png
|----play~iphone.png
|----play~ipad.png
......
¿Alguien tiene el mismo problema? Creo que esto es un error en iOS8. Por lo tanto, muchas aplicaciones han utilizado paquetes para organizar recursos, como imágenes. Pero ahora, este error hará que miles de aplicaciones se vuelvan feas y difíciles de usar. Realmente esperamos que Apple pueda solucionar este error en la próxima versión, de lo contrario, ¡toda mi aplicación tendrá que desarrollar una nueva versión para este error!
En realidad no está roto, solo lo estás enviando por el camino equivocado. Supongo que estás usando el simulador, y guardaste un archivo en alguna parte de tu aplicación y luego tomaste nota de la ruta completa a ese archivo. Sin embargo, cuando reconstruyes tu aplicación, el UUID de la aplicación instalada cambia, y la ruta guardada ya no es válida (aunque los archivos aún estén allí). Puede ver su ruta activa actual marcando [[NSFileManager defaultManager] currentDirectoryPath]
Tenga en cuenta que el valor cambia cada vez que reconstruye y vuelve a implementar su aplicación.
Para llegar a su archivo real, tendrá que hacer algo como esto:
NSString *image = @"myImage.png";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cache = [paths objectAtIndex:0];
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", cache, image];
UIImage *image = [UIImage imageWithContentsOfFile:fullPath];
Apple ha corregido este error en iOS8.1, Cheers
Solo usa
NSString *fullPath = [bundle pathForResource:name ofType:@"png"];
NSData *data = [NSData dataWithContentsOfFile:fullPath];
UIImage *image = [UIImage imageWithData:data];