2012-03-07 12 views
7

Tengo una aplicación en la tienda de aplicaciones que utiliza Core Data para conservar gran parte de la información. La excepción es almacenar imágenes. Guardo imágenes en subdirectorios en el directorio Documentos y almaceno una referencia NSURL a esa imagen en el atributo de objeto apropiado en el almacén de datos central.Actualizaciones de la aplicación, NSURL y el Directorio de documentos

Hemos notado que, cuando una actualización llega a la tienda de aplicaciones, esas imágenes no se encuentran, y por lo tanto no se muestran, utilizando las referencias almacenadas con la versión anterior de la aplicación. Ahora, tengo la sospecha de que el problema es que, dado que estamos utilizando dispositivos de desarrollo para probar, este problema se propaga porque el Directorio en el directorio de Aplicaciones al que la aplicación dev utiliza es diferente al que está creando/usando la Tienda de aplicaciones. He notado diferencias entre el directorio de la App Store para la aplicación en Aplicaciones y el creado mientras se depuraban las versiones en Xcode. Como tal, la URL almacenada en los datos centrales apunta a la carpeta de aplicaciones incorrecta. Esto es un poco difícil de depurar, ya que no puedo descargar una versión de la aplicación anterior, una vez que la nueva versión se ha lanzado en la tienda.

Así que tengo un par de preguntas. ¿Puedo garantizar que el subdirectorio Aplicaciones en el que las personas que descargan versiones de la misma aplicación sean las mismas, haciendo que esto no sea problema para los dispositivos que no son de desarrollo?

¿Debo almacenar URL de imágenes relativas o cadenas para representar la ubicación de estos recursos, o debería estar bien con el almacenamiento de lo que termina siendo las URL absolutas?

Muchas gracias, Felipe

Respuesta

13

Debe utilizar URLs relativas a almacenar referencias a archivos. La dirección URL absoluta es probable que cambie después de una actualización de la aplicación

archivos guardados Durante la aplicación Actualización de

Cuando un usuario descarga una actualización de la aplicación, iTunes instala la actualización en un nuevo directorio de aplicación. A continuación, mueve los archivos de datos del usuario de la instalación anterior al nuevo directorio de la aplicación antes de eliminar la instalación anterior. Los archivos en los siguientes directorios están garantizados para ser preservados durante el proceso de actualización:

  • Application_Home/Documentos
  • Application_Home/Biblioteca

Aunque los archivos en otros directorios de los usuarios también pueden moverse más, no debe confiar en que esté presente después de una actualización.

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

Thx a la caja de arena, el inicio de la aplicación es también el hogar del usuario. Por lo tanto, es posible utilizar la tilde de Unix, que es una mano corta para el hogar del usuario, es decir, ~/Documents, ~/Library y así sucesivamente.

Utilice -[NSString stringByAbbreviatingWithTildeInPath] para convertir una ruta completa en una ~ ruta relativa.Y revertirlo con -[NSString stringByExpandingTildeInPath].

+0

¡Muchas gracias! ¡Eso es justo lo que necesitaba saber! – flizit

+2

No sabía que se creó un nuevo directorio de aplicaciones cuando iTunes estaba instalando actualizaciones: terminé teniendo enlaces simbólicos usando las rutas absolutas que se invalidaban. ¡Así que ten cuidado con este comportamiento de los desarrolladores de iOS! :) –

+0

Ese enlace está roto. Pruebe: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html –

0

creo que lo que estás buscando es el siguiente:

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
Cuestiones relacionadas