MapKit / Location Manager stürzt app, wenn Ansicht Entladen

stimmen
7

Ich habe einen Bug, wo meine Anwendung „EXC_BAD_ACCESS“ stürzte ab, wenn ich die Zurück-Taste auf meiner Navigationsleiste getroffen und die Aussicht entladen, die eine MapKit (mapView) hatten und verwendet, um den Standort-Manager. Versucht, für Tage, um den Fehler zu beheben und kam schließlich mit einem Fix für jedermann auf, die sich über dieses Problem kommt:

Fügen Sie diesen Code auf Ihre dealloc

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}
Veröffentlicht am 25/03/2010 um 05:08
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Ich hatte diese auch, :) Und ja, dieses Update ist eigentlich ein richtiges fix;

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

Was hinter den Kulissen passiert, ist dies:

  1. Sie trifft den backkey. Diese leeren und in Folge gibt die Steuerung, die die mapView hält. Da es nur ein einziger Hinweis auf die Steuerung sehr wahrscheinlich gewesen ist, wird es dann dealloc'ed werden.

  2. Die Locationmanager ist jedoch sehr wahrscheinlich immer noch irgendwo in das Innenleben von geopositioning verwiesen.

  3. Wenn die Locationmanager und / oder mapView jetzt eine Benachrichtigung an ihre jeweilig Delegierten aussenden, sie folgen einem ungültigen Zeiger. Die in einer EXC_BAD_ACCESS Ausnahme führen.

Ja: nilling Delegierten, die auf sich selbst verweisen ist immer eine gute Idee. Ich nachgeführt wollte Apple-einige Automagic dort hinzufügen würde.

Beantwortet am 18/02/2012 um 15:04
quelle vom benutzer

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