2010-12-07 6 views
7

Estoy trabajando en una aplicación de mapeo iPhone/iPad basada MKMapView que se superpone mi propio mapa base esencial de proveer para algunas funciones limitadas, incluso cuando los usuarios están fuera de línea y no pueden llegar a un servidor de mapas baldosas de Google.¿Cómo puedo borrar el caché de mosaicos de mapas de MKMapView?

Esta funcionalidad funciona, pero estoy teniendo dificultades para probarla después de cada compilación nueva porque no puedo encontrar una forma de purgar/restablecer la caché de mosaico de mapas de iOS. La memoria caché de iOS incluso sobrevive a un ciclo de encendido y reinicio del dispositivo iOS. En cualquier lugar en el que haya ampliado las representaciones con las fichas en la memoria de la sesión de prueba anterior.

¿Hay alguna manera de forzar a iOS a vaciar su caché de mapa? En este momento, la única alternativa que puedo pensar es actualizar el sistema operativo cada vez que necesite hacer una prueba.

Gracias!

BTW: Esto es casi un duplicado de this question, pero en ese caso el problema no era probar con un caché vacío, sino liberar la memoria. La respuesta aceptada allí se centró en la cuestión de la RAM, no es el mismo problema que estoy teniendo aquí.

Respuesta

5

intente configurar el tamaño NSURLConnection caché a cero antes de crear cualquier instancia de su MKMapView

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache release]; 

Esto podría hacer que sus conexiones detener el almacenamiento de datos en caché como la memoria caché de tamaño restante será siempre insuficiente

+0

¿Sabía que el NSURLCache afecta al MKMapView? Por mis experimentos, parecía que el visor de mapas tenía su propio espacio de caché, pero podría estar equivocado. – radven

+1

hi @radven! En realidad, era bastante escéptico sobre 'MKMapView' y' NSURLCache' al principio, pero luego intenté subclasificar 'NSURLCache' para rastrear todas las conexiones realizadas desde mi aplicación y vi que las llamadas de google' MKMapView' pasaban por el caché. Puedes ver cómo lo implementé en este hilo http://stackoverflow.com/questions/5381687/ios-track-url-connections/5928185#5928185 –

+0

Estoy probando el método que detallaste en la otra pregunta y no teniendo mucha suerte Durante una panorámica y el zoom alrededor de un área del mapa que nunca había visto antes, solo recibí una llamada a la función cachedResponseForRequest: y se registró como "http://www.google.com/glm/mmap", Esperaba una llamada para cada azulejo de Google. ¿Estaba equivocado? – Craig

1

Me encontré con esta pregunta, y sin duda es un problema interesante. Claramente, MKMapView está guardando las teselas en un disco en algún lugar (porque sobrevive a un reinicio). Me pregunto si una posible solución sería 1) ubicar dónde se guardarán las teselas almacenadas en caché, y luego 2) eliminar programáticamente esa caché cuando se inicie la aplicación. Esto requeriría que un dispositivo con jailbreak le brinde acceso a archivos fuera del entorno limitado de la aplicación. Obviamente, no es adecuado para la distribución, pero para las pruebas sería presumiblemente aceptable.

Dicho esto, cuando tuve este problema terminé simplemente implementando mi propia vista de mapa en mosaico y ejecutando una prueba de accesibilidad para determinar si mostrar el mapa de google o mi modo fuera de línea.

1

No tenemos encontró una manera de borrar el caché MKMapView desde una aplicación, pero puede "Restablecer todo el contenido y los datos" en Configuración \ General \ Restablecer. Si bien esto no es lo ideal, es mucho más rápido que "actualizar el sistema operativo", de hecho, solo lleva unos minutos. Después del reinicio, también ha configurado el dispositivo y recarga la aplicación, pero esto también lleva unos minutos.

Cuestiones relacionadas