Almacenar UIImage como NSData devuelve resultados diferentes

Estoy creando una aplicación que permite a los usuarios ver imágenes de un sitio web. Cargo las imágenes en la pantalla y luego, una vez que el usuario toca una, le doy la opción de agregarla a sus favoritos.

Para permitirle ver las imágenes sin conexión, almaceno la UIImageJpegRepresentation en un NSMutableDictionary que luego ingresa en NSUserDefaults.

Cuando el usuario está en la sección de visualización de imágenes en línea, si se encuentra con una imagen favorita, puede eliminarla de favoritos (verifico si esa es una de sus favoritas al comparar NSData con lo que almacené en NSUserDefaults).

Ahora aquí está el problema: cuando el usuario ingresa a la sección de favoritos y carga las imágenes de NSUserDefaults, la comparación de NSData en NSUserDefaults con los NSData de la imagen en las vistas de imágenes en la pantalla falla. Entonces, cuando toca una imagen mientras está en la sección de favoritos, no se detecta que la imagen en sí sea un favorito en NSUserDefaults y asumo que los dos NSData son diferentes por alguna razón.

¿Podría alguien arrojar luz sobre por qué sucede esto y potencialmente dar una pista sobre cómo resolverlo?

preguntado el 02 de julio de 12 a las 00:07

1 Respuestas

Las imágenes están potencialmente siendo comprimidas de manera diferente por UIImageJPEGRepresentation -- JPEG es un formato con pérdidas.

Aparte de eso, esta no parece ser la mejor manera de lograr su objetivo declarado. Si el usuario ve muchas imágenes y tiene muchas imágenes favoritas, tendrá un rendimiento muy bajo. Una solución mucho mejor es almacenar algún tipo de ID de imagen, por ejemplo, una URL. Es probable que la comparación de cadenas de URL sea mucho más rápida que la comparación de imágenes completas.

Respondido 02 Jul 12, 00:07

Sí estoy de acuerdo. Pero el único problema es que si almacenara las URL, el usuario no podría ver nada sin conexión. Y solo planeo almacenar alrededor de 100 imágenes. ¿Es eso demasiado? - Sorín Cioban

También puede almacenar las imágenes, si lo desea. Si estás interesado en guardarlos en NSUserDefaults (en lugar del sistema de archivos, que probablemente sea preferible), puede almacenar un NSDictionary de URL -> asignaciones de imágenes. Si el diccionario tiene una URL como clave, sabrá que la imagen se ha marcado como favorita. - Extranjero sedado

Lo siento, me ha tomado tanto tiempo para responder. Entonces, ¿lo que está diciendo es almacenar URL -> nombres de archivos de imagen en un diccionario? Entonces, esencialmente, estaría comparando el archivo de imagen almacenado con lo que he cargado en la pantalla, por lo tanto, menos tiempo para comparar y menos memoria utilizada en NSUserDefaults, ¿correcto? - Sorín Cioban

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.