UIImage "imageNamed:" funciona en iOS 8, pero no 7?

Hay varias respuestas sobre SO ya sobre "imageNamed:" no funciona, pero ninguna ha incluido mi arruga particular:

Estoy recibiendo nil desde "imageNamed:" en iOS 7, pero la misma compilation funciona en iOS 8.

Obviamente, todo está conectado correctamente porque funciona en iOS 8, pero constantemente devuelve nil para una amplia gama (tal vez 2 docenas) de imágenes en iOS 7. Notablemente, moví los activos a un AssetCatalog en el momento en que comenzó. ¿Hay algún comportamiento inusual de los catálogos de activos en iOS 7 que tenga que contabilizarse?

Aquí hay algunos detalles, basados ​​en las respuestas a preguntas similares en este sitio:

  • Este problema aparece en las comstackciones reales que se archivan y se exportan para los usuarios, así como también en el simulador. Ambas versiones muestran la split del comportamiento de iOS 7/8.
  • Las imágenes son PNG y el Asset Catalog contiene versiones 1x, 2x y 3x de cada una.
  • He confirmado las coincidencias de ortografía y mayúsculas (confirmado por su funcionamiento en iOS 8).

De lejos, la mayoría de las respuestas en SO son para errores que evitarían que funcione en absoluto . ¿Alguien puede ayudar con una llamada de image que solo funciona en iOS 8?

Huh. Así que aparentemente la solución fue que si su set de imágenes en el Catálogo de activos tiene un sufijo de file dentro de su nombre, iOS 7 se desconecta. Tenemos varias versiones de cada file en nuestro Asset Catalog, la misma image, pero para diferentes usos, por lo que mi compañero de trabajo las había nombrado con el nombre de file anterior como tal:

 "RedBall.png - Small" (includes 25px, 50px, 75px) "RedBall.png - Large" (includes 150px, 300px, 450px) "BlueBall.png - Small" "BlueBall.png - Large" 

Al parecer iOS 8 es lo suficientemente inteligente como para reconocer que "RedBall.png – Small" es el nombre, mientras que iOS 7 no sabe qué hacer cuando ".png" está ahí en el medio.

Cambiar el nombre de los files para …

 "RedBall - Small" "RedBall - Large" "BlueBall - Small" "BlueBall - Large" 

…Parece funcionar.

Puede probar los siguientes pasos:

  1. Limpia tu proyecto (Cmd + Shift + K) y ejecuta de nuevo.

  2. Agregue otra image (no @ 2x, @ 3x) y compruebe que funciona o no.

  3. Cree un nuevo proyecto y verifique que UIImage imagedName pueda funcionar con iOS7 / 8.

Con algunos problemas, no es necesario que intentes encontrar una causa raíz, simplemente saltala y ve 🙂