Il problema è che ci sono due metodi. Uno è removeAnnotation che accetta un oggetto MKAnnotation e l'altro è removeAnnotation che accetta un array di MKAnnotations, nota la "s" alla fine di uno e non dell'altro. Tentando di eseguire il cast da [MKAnnotation]
, un array su MKAnnotation
un singolo oggetto o viceversa manderà in crash il programma. La linea di codice self.mapView.annotations crea una matrice. Quindi, se si utilizza il metodo removeAnnotation, è necessario per indicizzare l'array per un singolo oggetto all'interno della matrice, come illustrato di seguito:
let previousAnnotations = self.mapView.annotations
if !previousAnnotations.isEmpty{
self.mapView.removeAnnotation(previousAnnotations[0])
}
Così, è possibile rimuovere le varie annotazioni mantenendo la posizione degli utenti. Dovresti sempre testare il tuo array prima di tentare di rimuovere oggetti da esso, altrimenti è possibile che si verifichi un fuori limite o un errore nullo.
Nota: l'uso del metodo removeAnnotations (con una s) rimuove tutte le annotazioni. Se stai ottenendo un nulla, questo implica che hai una matrice vuota. Puoi verificarlo aggiungendo un'altra istruzione dopo il se, in questo modo;
else{print("empty array")}
Ha funzionato alla grande! Grazie! – user4812000