Sto tentando di aggiornare la visualizzazione della mia mappa e caricare nuovi dati dal server quando il dispositivo acquisisce la posizione dell'utente. Ecco quello che sto facendo:Aggiornamento di un MKMapView quando la posizione dell'utente viene aggiornata o utilizzando i valori predefiniti
- (void)viewDidLoad {
CGRect bounds = self.view.bounds;
mapView = [[MKMapView alloc] initWithFrame:bounds];
mapView.showsUserLocation=YES;
mapView.delegate=self;
[self.view insertSubview:mapView atIndex:0];
[self refreshMap];
}
- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
//this is to avoid frequent updates, I just need one position and don't need to continuously track the user's location
if (userLocation.location.horizontalAccuracy > self.myUserLocation.location.horizontalAccuracy) {
self.myUserLocation = userLocation;
CLLocationCoordinate2D centerCoord = { userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude };
[theMapView setCenterCoordinate:centerCoord zoomLevel:10 animated:YES];
[self refreshMap];
}
}
- (void)refreshMap {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[self.mapView removeAnnotations:self.mapView.annotations];
//default position
NSString *lat = @"45.464161";
NSString *lon = @"9.190336";
if (self.myUserLocation != nil) {
lat = [[NSNumber numberWithDouble:myUserLocation.coordinate.latitude] stringValue];
lon = [[NSNumber numberWithDouble:myUserLocation.coordinate.longitude] stringValue];
}
NSString *url = [[NSString alloc] initWithFormat:@"http://myserver/geo_search.json?lat=%@&lon=%@", lat, lon];
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
[url release];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
Ho anche una - connessione (void): connessione (NSURLConnection *) didReceiveData: (NSData *) i dati, per creare e aggiungere le annotazioni.
Ecco cosa succede: a volte ottengo la posizione dopo un po ', quindi ho già caricato i dati vicino alla posizione predefinita. Quindi ottengo la posizione e dovrebbe rimuovere le vecchie annotazioni e aggiungere quelle nuove, invece continuo a vedere le vecchie annotazioni e quelle nuove vengono aggiunte comunque (diciamo che ricevo 10 annotazioni ogni volta, quindi significa che io avere 20 sulla mia mappa quando dovrei avere 10).
Cosa sto sbagliando?
In refreshMap, prima della riga removeAnnotations, controllare se self.mapView è nullo. – Anna
Non è nulla, questo è quello che ottengo:> Non riesco nemmeno a testare correttamente perché ho notato questo problema su un dispositivo reale e non nel simulatore ... Il codice è logicamente corretto? –
koichirose
Non vedo alcun problema evidente. Forse è qualcosa con come vengono aggiunte le annotazioni o in viewForAnnotation. – Anna