2010-12-07 4 views
7

Ich arbeite an einer MKMapView-basierten iPhone/iPad-Mapping-App, die meine eigene Basiskarte überlagert, um einige eingeschränkte Funktionen bereitzustellen, selbst wenn Benutzer offline sind und den Google-Karten-Kachelserver nicht erreichen können.Wie kann ich MKMapViews Cache für Kartenkacheln löschen?

Diese Funktionalität funktioniert - aber ich habe es schwer, es nach jedem neuen Build zu testen, weil ich keine Möglichkeit finde, den iOS-Kartenkachel-Cache zu leeren/zurückzusetzen. Der iOS-Cache überlebt sogar einen Aus- und Wiedereinschalten des iOS-Geräts. Irgendwo, in den ich in der Vergangenheit gezoomt habe, rendert mit den Kacheln im Speicher von der vorherigen Testsitzung.

Gibt es eine Möglichkeit, iOS zu zwingen, seinen Kartencache zu leeren? Die einzige Alternative, die ich mir vorstellen kann, ist, das Betriebssystem jedes Mal neu zu flashen, wenn ich einen Test machen muss.

Danke!

BTW: Dies ist fast ein Duplikat von this question, aber in diesem Fall wurde das Problem nicht mit einem leeren Cache getestet, sondern Speicher freizugeben. Die angenommene Antwort konzentrierte sich auf das RAM-Problem, nicht das gleiche Problem, das ich hier habe.

Antwort

5

Versuchen NSURLConnection Cache-Größe auf Null vor dem Erstellen jede Instanz Ihrer MKMapView

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

Dies könnte Ihre Verbindungen stoppen Speicherung im Cache gespeicherten Daten als Cache-Restgröße wird immer unzureichend sein

+0

Wissen Sie, dass der NSURLCache die MKMapView beeinflusst? Nach meinen Experimenten hat der Map Viewer seinen eigenen Cache-Speicher, aber ich könnte mich irren. – radven

+1

Hallo @ Radven! Eigentlich war ich anfangs ziemlich skeptisch gegenüber MKMapView und NSURLCache, aber dann versuchte ich, NSURLCache zu untergliedern, um alle Verbindungen zu meiner App zu verfolgen, und ich sah die Aufrufe von MKMapView durch den Cache. Sie können sehen, wie ich es in diesem Thread implementiert http://stackoverflow.com/questions/5381687/ios-track-url-connections/5928185#5928185 –

+0

Ich bin mit der Methode, die Sie auf der anderen Frage und ausführlich beschrieben nicht viel Glück. Während eines Schwenkens und Zoomens in einem Bereich der Karte, den ich noch nie zuvor gesehen hatte, erhielt ich nur einen Aufruf an die Funktion cachedResponseForRequest: Sie wurde als "http://www.google.com/glm/mmap" protokolliert. Ich hatte einen Anruf für jede Google-Kachel erwartet. Lag ich falsch? – Craig

1

Ich bin über diese Frage gestolpert, und es ist sicherlich ein interessantes Problem. Offensichtlich speichert MKMapView die Kacheln irgendwo auf der Festplatte (weil sie einen Neustart überlebt). Ich frage mich, ob eine mögliche Lösung darin besteht, 1) herauszufinden, wo Cachespeicher gespeichert werden, und 2) den Cache beim Start der App programmatisch zu löschen. Dies würde ein Jailbroken-Gerät erfordern, um Ihnen Dateizugriff außerhalb Ihrer Anwendungs-Sandbox zu geben. Offensichtlich ungeeignet für den Vertrieb, aber zum Testen wäre vermutlich akzeptabel.

Das sagte, als ich dieses Problem hatte, habe ich nur meine eigene gekachelte Kartenansicht implementiert und einen Erreichbarkeitstest ausgeführt, um festzustellen, ob die Google Map oder mein Offline-Modus angezeigt werden soll.

1

Wir haben keine Einstellung Ich habe einen Weg gefunden, den MKMapView Cache in einer App zu löschen, aber Sie können "Alle Inhalte und Daten zurücksetzen" unter Einstellungen \ Allgemein \ Zurücksetzen. Während dies nicht ideal ist, ist es viel schneller als "das Betriebssystem reflashing" in der Tat dauert es nur ein paar Minuten. Nach dem Reset haben Sie auch das Gerät eingerichtet und die App neu geladen, dies dauert aber noch einige Minuten.

Verwandte Themen