Inside my ViewController's
Klasse viewDidLoad
Methode, die ich habe:MKMapItem.forCurrentLocation() gibt "Unknown Location"
override func viewDidLoad() {
super.viewDidLoad()
requestAuthorization()
locationManager.delegate = self
print(MKMapItem.forCurrentLocation())
}
und hier ist requestAuthorization()
Funktion:
private func requestAuthorization(){
if CLLocationManager.authorizationStatus() == .notDetermined{
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
}
else if CLLocationManager.authorizationStatus() == .denied{
//TODO
}
}
das Problem ist, dass forCurrentLocation()
Funktion nie zurückkehrt Aktueller Benutzerort Die zurückgegebenen Koordinaten von MKMapItem sind: (Breitengrad: 0, Längengrad: 0). Hier ist das Ergebnis der Druckfunktion.
MKMapItem: 0x60000014e020 isCurrentLocation = 1; name = "Unbekannter Ort";
Was mache ich falsch?
Edit:
Der Grund, warum ich wollte MKMapItem.forCurrentLocation()
verwenden war, dass ich geplant Benutzer in prepareForSegue
bekommen koordiniert. Und ich dachte, es wäre einfacher als didUpdateLocations
Delegate-Methode zu verwenden. Sehen Sie den Code:
if segue.identifier == "categories",
let destinationVC = segue.destination as? CategoriesGroupViewController{
if let cell = sender as? UICollectionViewCell{
let indexPath = categoriesCollectionView.indexPath(for: cell)
destinationVC.groupOfDestinations = destinationsByCategory[indexPath!.row]
// 0 is index for Near Me cell
if indexPath?.row == 0 {
destinationVC.groupOfDestinations = getNearMeDestinations()
}
}
private func getNearMeDestinations() -> GroupOfDestinations{
let userCoordinates = MKMapItem.forCurrentLocation().placemark.coordinate
let nearMeCircularRegion: CLCircularRegion = CLCircularRegion(center: userCoordinates, radius: 10000, identifier: "nearMe")
...
return nearMeDestinations
}
Verwenden Sie 'print (mapView.userLocation.location? .koordinate)' wenn Sie MKMapView in ViewController haben. –