Das ist mir einfach passiert und ich glaube, ich habe die Antwort.
Das Problem scheint mit dem Hinzufügen von Anmerkungen zu einer Kartenansicht zu sein. Es scheint, dass das MKMapView-Objekt diese Objekte nicht bei dem Aufrufen von "AddAnnotations" auf einer MKMapView-Instanz behält. Nachdem Sie mit der Karte herumgespielt haben und die Anmerkungen in die Ansicht und aus der Ansicht verschoben haben, wurde der Speicher freigegeben, wenn es Zeit ist, die Anmerkungen erneut zu rendern, und Sie erhalten einen EXC_BAD_ACCESS-Fehler.
Um dies zu lösen, behalten Sie nur die Objekte bei, die als Anmerkungen hinzugefügt werden sollen. Dies kann erreicht werden, indem eine NSMutableArray-Instanzvariable der aktuellen Annotationen der Karte verwendet wird. Jedes Mal, wenn Sie addAnnotations aufrufen, fügen Sie auch diese Objekte zu diesem beibehaltenen Array hinzu, und Sie sollten alle Einstellungen vornehmen.
In Ihrer .h-Datei:
@interface MapViewController : TTModelViewController <MKMapViewDelegate, UIAlertViewDelegate> {
NSMutableArray *feeds;
}
@property (nonatomic, retain) NSMutableArray *feeds;
In .m-Datei:
@synthesize feeds;
// (release feeds in your dealloc)
Und wenn Sie Hinzufügen von Anmerkungen, etwas tun, wie folgt aus:
if (self.feeds == nil) {
self.feeds = [NSMutableArray array];
}
[self.feeds addObjectsFromArray:newPois]; // newPois is an array of annotations
[mapView addAnnotations:newPois];
Bis jetzt für mich gearbeitet. Wird aktualisiert, wenn sich die Dinge ändern. Wenn Sie Objekte aus der Kartenansicht entfernen, möchten Sie dieses Feed-Array wahrscheinlich auch synchronisieren, um "toten Speicher" zu vermeiden."
Nun, es war eines der ersten Dinge, über die ich nachgedacht habe. Ich habe meinen Code zweimal ausgecheckt, keine Doppelfreigabe ... Die seltsame Sache ist, dass es nur von Zeit zu Zeit passiert. Ich auch haben einige MKPinAnnotationView Objekte auf der Karte –
es passiert nur intermittierend wahrscheinlich bedeutet, dass es eine racing condition.jedenfalls, Ihre Fehlermeldung sagt uns, es gibt eine doppelte Freigabe, Sie geben uns nichts mehr zu arbeiten.Was erwarten Sie? – hop
Ja, ich weiß, aber das Problem passiert sogar mit einer einfachen MKMapView-Ansicht ohne irgendetwas anderes. Ich habe versucht, eine neue Datei mit zugehöriger .XIB zu erstellen, eine MKMapView hinzugefügt, mit der Map herumgespielt und denselben Fehler bekommen wenn es ein Problem im Zusammenhang mit dem Framework war und wenn jemand anderes das gleiche Problem hatte. –