2017-05-18 1 views
0

Ich mache eine Karteswift 3 Fehler mit MapKit

Fügen Sie die beiden Variablen in info.plist "Privacy - Location Wenn Verwendung Beschreibung", "Privatleben - Location Immer Verwendung Beschreibung"

Fehler: Beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException' Grund: 'ungültige Region'

Mein Code:

import UIKit 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate { 


    @IBOutlet weak var map: MKMapView! 

    var manager: CLLocationManager! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     manager = CLLocationManager() 
     manager.delegate = self 
     manager.desiredAccuracy = kCLLocationAccuracyBest 
     manager.requestWhenInUseAuthorization() 
     manager.startUpdatingLocation() 

     let uilpgr = UILongPressGestureRecognizer(target: self, action:Selector(("action:"))) 
     uilpgr.minimumPressDuration = 2.0 
     map.addGestureRecognizer(uilpgr) 

    } 

    func action(gestureRecognizer:UIGestureRecognizer){ 
     if gestureRecognizer.state == UIGestureRecognizerState.began{ 
     let touchPoint = gestureRecognizer.location(in: self.map) 
      let newCoordinate = self.map.convert(touchPoint, toCoordinateFrom: self.map) 
      let annotation = MKPointAnnotation() 

      annotation.coordinate = newCoordinate 
      annotation.title = "Meu lugar" 
      self.map.addAnnotation(annotation) 



     } 
    } 


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let userLocation:CLLocation = locations[0] 
     let latitude = userLocation.coordinate.latitude 
     let longitude = userLocation.coordinate.longitude 
     let coordinate = CLLocationCoordinate2DMake(longitude,latitude) 
     let latDelta: CLLocationDegrees = 0.01 
     let lonDelta: CLLocationDegrees = 0.01 
     let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 
     let region:MKCoordinateRegion = MKCoordinateRegionMake(coordinate, span) 
     self.map.setRegion(region, animated: false) 

    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 
+0

Ist die Fehlermeldung nicht offensichtlich? 'region' scheint ungültig zu sein. – ozgur

+0

Auch gibt es keinen Bedarf für all diesen Code; Sie können das Benutzer-Tracking einfach direkt in Ihrer Kartenansicht aktivieren. – Paulw11

Antwort

0

ich glaube, Sie vergessen t o Importieren Sie das CoreLocation-Framework. Ich glaube nicht, dass Sie ein gültiges Standortobjekt von der Delegate-Methode zurückbekommen. Bitte importieren Sie das CoreLocation Framework und testen Sie es erneut.

+0

Sie müssen CoreLocation nicht importieren, wenn Sie MapKit bereits importiert haben. MapKit importiert CoreLocation bereits. –

0

Ihr Code in der locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) ist überflüssig, da Sie nur self.map.setUserTrackingMode(.follow, animated: true)

nennen kann, wenn der Benutzer die Karte schwenken waren, werden User-Tracking deaktiviert werden, so dass Sie diese Delegierten verwenden müssten mapView(_ mapView: MKMapView, didChange mode: MKUserTrackingMode, animated: Bool) die User-Tracking zu aktualisieren Modus.