Warum bin ich Absturz nach MKMapView befreit wird, wenn ich nicht mehr verwenden?

stimmen
23

Ich habe ein MKMapView. Manchmal nach meiner Ansicht - Controller des Feldes verwiesen, ich werde eine bekommen EXC_BAD_ACCESS.

Ich drehte mich auf NSSZombiesund es sieht aus wie die MKMapView‚s Delegierten - mein View - Controller! - wird genannt, obwohl sowohl die MKMapViewund UIViewControllerUnterklasse befreit werden. Ich habe überprüft, und meine Speicherverwaltung korrekt ist .

Was ist los?

Veröffentlicht am 02/02/2010 um 23:10
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
43

Dies ist wegen der Art und Weise MKMapViewfunktioniert. Es ist eine Operation ansteht, so MapKit ist das Halte MKMapViewund es ist noch nicht wirklich ausgeplant. Das ist nicht selbst ein Problem. Das Problem ist , dass es immer noch Nachrichten an Ihre Stellvertretung senden.

Die Abhilfe ist einfach: Im Rahmen Ihrer Bereinigung des View - Controller auf der Karte ansehen des Delegierten festgelegt nil, welche verhindern wird MKMapViewvon Senden von Nachrichten an sie.

Dies wird in dokumentiert MKMapViewDelegate - Protokoll - Referenz :

Vor Freigabe eines MKMapView Objekt, für das Sie einen Delegaten festgelegt haben, daran erinnern, dass Objekt des Delegierten-Eigenschaft auf Null zu setzen. Ein Ort, den Sie dies tun können, ist in der dealloc Methode, wo Sie von der Kartenansicht entsorgen.

Edit: Geben Oscar ein upvote auch knapp unter, die in der Dokumentation Zitat hier zur Verfügung gestellt.

In Anbetracht ARC, schlage ich vor , dies bedeutet , dass Sie Ihre Karte nach Ansicht der Delegierten festlegen sollte nilIhrer Ansicht nach Controllers dealloc.

Beantwortet am 02/02/2010 um 23:18
quelle vom benutzer

stimmen
18

OK, ist dies die Bestätigung der Antwort. Es ist aus dem Apple-doc, aber es fehlt von MKMapView. Es ist nur unter der Dokumentation zu seinem Delegierten Protokoll gefunden:

Vor Freigabe eines MKMapView Objekt, für das Sie einen Delegaten festgelegt haben, daran erinnern, dass Objekt des Delegierten-Eigenschaft auf Null zu setzen. Ein Ort, den Sie dies tun können, ist in der dealloc Methode, wo Sie von der Kartenansicht entsorgen.

Hinweis: Dies gilt auch für UIWebView.

Ich stellte den Delegierten Zeiger des MapView auf null in der dealloc Methode des Delegierten und unsere Abstürze scheinen beseitigt.

Beantwortet am 20/11/2011 um 22:20
quelle vom benutzer

stimmen
2

Festlegen der Delegierten Kartenansicht auf nilnicht für mich arbeiten. Allerdings Einstellung showsUserLocation=NOarbeitete an den Delegierten , indem sichergestellt wird keine Standortaktualisierungen empfangen werden.

Beantwortet am 02/09/2011 um 17:57
quelle vom benutzer

stimmen
0

Das Problem war in meinem Fall, dass das erste Mal, dass ich App gestartet drücke ich nicht „erlauben“, wenn für die Lage Genehmigung auffordert (zufällig !!).

Deinstallieren App und neu zu installieren es, wenn Prompt erscheinen ich die Berechtigungen und nicht mehr abstürzen lassen!

Beantwortet am 21/05/2015 um 15:11
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more